from decorator import decorator
from twisted.python.threadpool import ThreadPool
from twisted.internet import threads
POOL_SIZE=5 #how many threads should the db connector pool should have
class Data:
def __init__(self):
self.pool = ThreadPool(minthreads=1, maxthreads=POOL_SIZE, name='database')
self.reactor = None
data = Data()
#a valid dbDefer decorator
def startPool(reactor):
data.pool.start()
data.reactor = reactor
data.reactor.addSystemEventTrigger('before', 'shutdown', data.pool.stop)
@decorator
def runInDBPool(f,*args,**kwargs):
"""Decorator to run DB queries in Twisted's thread pool"""
return threads.deferToThreadPool(data.reactor, data.pool, f, *args, **kwargs)