iro/controller/pool.py
branchdevel
changeset 132 80a334e2aae7
child 135 f8640c663e3e
equal deleted inserted replaced
131:c51c3e8c3ec0 132:80a334e2aae7
       
     1 from twisted.python.threadpool import ThreadPool
       
     2 from twisted.internet import threads
       
     3 
       
     4 class Pool:
       
     5     def __init__(self,name,maxthreads):
       
     6         self.maxthreads = maxthreads
       
     7         self.pool =  ThreadPool(minthreads=1, maxthreads=maxthreads, name=name)
       
     8         self.reactor = None
       
     9 
       
    10     def start(self, reactor):
       
    11         self.pool.start()
       
    12         self.reactor = reactor
       
    13         self.reactor.addSystemEventTrigger('before', 'shutdown', self.pool.stop)
       
    14 
       
    15     def run(self,f,*args,**kwargs):
       
    16         """To run a function in Twisted's thread pool"""
       
    17         return threads.deferToThreadPool(self.reactor, self.pool, f, *args, **kwargs)
       
    18 
       
    19 taskPool = Pool('task',5)
       
    20 dbPool = Pool('database',5)
       
    21 
       
    22 
       
    23 pools=[taskPool,dbPool]
       
    24 
       
    25 def startPool(reactor):
       
    26     '''starting all pools'''
       
    27     for pool in pools:
       
    28         pool.start(reactor)
       
    29