# HG changeset patch # User Sandro Knauß # Date 1328527907 -3600 # Node ID 80a334e2aae76956a1c19f79ef4185e633e204c9 # Parent c51c3e8c3ec0764db05f7910df19671d30af16af moving pool to controller diff -r c51c3e8c3ec0 -r 80a334e2aae7 iro/controller/pool.py --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/iro/controller/pool.py Mon Feb 06 12:31:47 2012 +0100 @@ -0,0 +1,29 @@ +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) + +taskPool = Pool('task',5) +dbPool = Pool('database',5) + + +pools=[taskPool,dbPool] + +def startPool(reactor): + '''starting all pools''' + for pool in pools: + pool.start(reactor) + diff -r c51c3e8c3ec0 -r 80a334e2aae7 iro/main.py --- a/iro/main.py Mon Jan 30 23:28:14 2012 +0100 +++ b/iro/main.py Mon Feb 06 12:31:47 2012 +0100 @@ -5,12 +5,14 @@ import logging -from .model import setEngine,startPool, POOL_SIZE +from .model import setEngine, setPool +from .controller.pool import startPool, dbPool from .view import xmlrpc def runReactor(reactor, engine, root): setEngine(engine) startPool(reactor) + setPool(dbPool) reactor.listenTCP(7080, server.Site(root)) logging.info("Server is running now...") @@ -19,7 +21,7 @@ if __name__ == '__main__': engine = create_engine('mysql://test:test@localhost/test', - poolclass = pool.SingletonThreadPool, pool_size=POOL_SIZE, ) + poolclass = pool.SingletonThreadPool, pool_size=dbPool.maxthreads, ) root = resource.Resource() diff -r c51c3e8c3ec0 -r 80a334e2aae7 iro/model/__init__.py --- a/iro/model/__init__.py Mon Jan 30 23:28:14 2012 +0100 +++ b/iro/model/__init__.py Mon Feb 06 12:31:47 2012 +0100 @@ -3,7 +3,7 @@ import utils from dbdefer import setEngine -from pool import startPool,POOL_SIZE +from pool import setPool diff -r c51c3e8c3ec0 -r 80a334e2aae7 iro/model/pool.py --- a/iro/model/pool.py Mon Jan 30 23:28:14 2012 +0100 +++ b/iro/model/pool.py Mon Feb 06 12:31:47 2012 +0100 @@ -1,25 +1,18 @@ 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 + self.pool = None data = Data() #a valid dbDefer decorator -def startPool(reactor): - data.pool.start() - data.reactor = reactor - data.reactor.addSystemEventTrigger('before', 'shutdown', data.pool.stop) +def setPool(pool): + data.pool = pool @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) + return data.pool.run(f, *args, **kwargs) diff -r c51c3e8c3ec0 -r 80a334e2aae7 tests/xmlrpc.py --- a/tests/xmlrpc.py Mon Jan 30 23:28:14 2012 +0100 +++ b/tests/xmlrpc.py Mon Feb 06 12:31:47 2012 +0100 @@ -11,7 +11,7 @@ from xmlrpclib import Server as xServer, ServerProxy, Fault -from iro.model import POOL_SIZE as DB_POOL_SIZE +from iro.controller.pool import dbPool from iro.model.schema import User, Base, Offer, Userright, Job, Message @@ -254,7 +254,7 @@ self.server = Server('%s/my.cnf'%self.tdir) self.db = SampleDatabase("test","test",'%s/my.cnf'%self.tdir) self.engine = create_engine('mysql://test:test@localhost/test?unix_socket=%s/socket'%self.tdir, - poolclass = pool.SingletonThreadPool, pool_size=DB_POOL_SIZE, )#echo=True) + poolclass = pool.SingletonThreadPool, pool_size=dbPool.maxthreads, )#echo=True) def setUp(self): with open('%s/my.cnf'%self.tdir,'w') as cnf: