iro/controller/pool.py
author Sandro Knauß <knauss@netzguerilla.net>
Tue, 28 Feb 2012 01:45:05 +0100
branchdevel
changeset 199 1bcca1a40769
parent 141 90c95fdd1e33
child 264 584b9c97ecfd
permissions -rw-r--r--
test for nor explicit frm mailaddress
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
132
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     1
from twisted.python.threadpool import ThreadPool
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     2
from twisted.internet import threads
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     3
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     4
class Pool:
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     5
    def __init__(self,name,maxthreads):
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     6
        self.maxthreads = maxthreads
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     7
        self.pool =  ThreadPool(minthreads=1, maxthreads=maxthreads, name=name)
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     8
        self.reactor = None
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
     9
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    10
    def start(self, reactor):
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    11
        self.pool.start()
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    12
        self.reactor = reactor
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    13
        self.reactor.addSystemEventTrigger('before', 'shutdown', self.pool.stop)
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    14
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    15
    def run(self,f,*args,**kwargs):
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    16
        """To run a function in Twisted's thread pool"""
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    17
        return threads.deferToThreadPool(self.reactor, self.pool, f, *args, **kwargs)
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    18
135
f8640c663e3e model.job created
Sandro Knauß <knauss@netzguerilla.net>
parents: 132
diff changeset
    19
#task Pool for sending
132
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    20
taskPool = Pool('task',5)
135
f8640c663e3e model.job created
Sandro Knauß <knauss@netzguerilla.net>
parents: 132
diff changeset
    21
f8640c663e3e model.job created
Sandro Knauß <knauss@netzguerilla.net>
parents: 132
diff changeset
    22
#db Pool to handle reqests to sqlalchemy
132
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    23
dbPool = Pool('database',5)
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    24
135
f8640c663e3e model.job created
Sandro Knauß <knauss@netzguerilla.net>
parents: 132
diff changeset
    25
# all pools in one list
132
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    26
pools=[taskPool,dbPool]
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    27
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    28
def startPool(reactor):
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    29
    '''starting all pools'''
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    30
    for pool in pools:
80a334e2aae7 moving pool to controller
Sandro Knauß <knauss@netzguerilla.net>
parents:
diff changeset
    31
        pool.start(reactor)