moving pool to controller devel
authorSandro Knauß <knauss@netzguerilla.net>
Mon, 06 Feb 2012 12:31:47 +0100
branchdevel
changeset 132 80a334e2aae7
parent 131 c51c3e8c3ec0
child 133 214fddcf7133
moving pool to controller
iro/controller/pool.py
iro/main.py
iro/model/__init__.py
iro/model/pool.py
tests/xmlrpc.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)
+
--- 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: