from multiprocessing import Process, Pool
from sqlalchemy import create_engine
from time import sleep
from tempfile import mkdtemp
import shutil
from iro.controller.database import createDatabase,WithSession, DBDefer
import iro.controller.user as imuser
import iro.controller.database as db
from iro.model import User
from ngdatabase.mysql import Server,createConfig,Database
class SampleDatabase(Database):
def createPassword(self):
self.password="test"
return self.password
import logging
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(name)s(%(processName)s)-%(levelname)s: %(message)s')
def xxxxx(userid):
import xmlrpclib
return xmlrpclib.ServerProxy('http://localhost:7080/RPC2').status(userid)
def main():
from twisted.internet import reactor
from twisted.web import xmlrpc, server
from iro.view.xmlrpc import getResource
class XMLRPCDebug(xmlrpc.XMLRPC):
def xmlrpc_stop(self):
reactor.callLater(0.5,reactor.stop)
return ""
root=getResource()
root.putChild('debug', XMLRPCDebug())
reactor.listenTCP(7080, server.Site(root))
reactor.suggestThreadPoolSize(5)
reactor.run()
if __name__ == '__main__':
tdir = mkdtemp(prefix='iro-mysql-')
try:
with open('%s/my.cnf'%tdir,'w') as cnf:
cnf.write(createConfig(tdir))
s = Server('%s/my.cnf'%tdir)
s.create()
s.start()
d=SampleDatabase("test","test",'%s/my.cnf'%tdir)
d.create()
db.engine = create_engine('mysql://test:test@localhost/test?unix_socket=%s/socket'%tdir)
dbdefer = DBDefer('mysql://test:test@localhost/test?unix_socket=%s/socket'%tdir, pool_size=5)
@dbdefer
def getuser(userhash, session):
session.execute("SELECT SLEEP(10)")
return imuser._getuser(userhash = userhash, session=session)
imuser.dbdefer=dbdefer
imuser._getuser=imuser.getuser
imuser.getuser=getuser
try:
createDatabase()
with WithSession(autocommit=True) as session:
session.add(User(name='test',apikey='abcdef123456789'))
p = Process(target=main)
p.start()
sleep(1)
pool=Pool(5)
print pool.map(xxxxx, ('abcdef123456789',)*25)
p.join()
finally:
s.stop()
finally:
shutil.rmtree(tdir)