--- /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)
+
--- 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()
--- 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
--- 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)
--- 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: