iro/controller/pool.py
author Sandro Knauß <knauss@netzguerilla.net>
Sun, 25 Mar 2012 20:14:35 +0200
branchdevel
changeset 253 e8d56537c9cc
parent 141 90c95fdd1e33
child 264 584b9c97ecfd
permissions -rw-r--r--
start documenting with reST syntax.

from twisted.python.threadpool import ThreadPool
from twisted.internet import threads

class Pool:
    def __init__(self,name,maxthreads):
        self.maxthreads = maxthreads
        self.pool =  ThreadPool(minthreads=1, maxthreads=maxthreads, name=name)
        self.reactor = None

    def start(self, reactor):
        self.pool.start()
        self.reactor = reactor
        self.reactor.addSystemEventTrigger('before', 'shutdown', self.pool.stop)

    def run(self,f,*args,**kwargs):
        """To run a function in Twisted's thread pool"""
        return threads.deferToThreadPool(self.reactor, self.pool, f, *args, **kwargs)

#task Pool for sending
taskPool = Pool('task',5)

#db Pool to handle reqests to sqlalchemy
dbPool = Pool('database',5)

# all pools in one list
pools=[taskPool,dbPool]

def startPool(reactor):
    '''starting all pools'''
    for pool in pools:
        pool.start(reactor)