import sys import SOAPpy import urllib2 import threading import Queue import random import time from asynchRDFWriter import * __author__ = "Morten Goodwin Olsen" __maintainer__ = "Nils Ulltveit-Moe" __version__ = "$Id: DBPool.py 1974 2006-04-24 18:35:47Z num $" __modified__ = 'Thu Jun 8 12:37:05 IST 2006' class DBPool(threading.Thread): #queue=Queue.Queue(200) def __init__(self,writeRDFTriple, host,username,password,database,rdfmodel): threading.Thread.__init__(self) self.host = host self.username = username self.password = password self.database = database self.rdfmodel = rdfmodel self.writeRDFTriple = writeRDFTriple self.asyncwriter = asynchwriter('',self.writeRDFTriple,self.host,self.username,self.password,self.database,self.rdfmodel) self.keeprunning = True self.queue=Queue.Queue(200) def writerdf(self,rdf): # Perform SOAP call try: self.queue.put(rdf) except: pass def stop(self): self.queue.put(None) def run(self): while self.keeprunning: element=self.queue.get() if element==None: self.keeprunning = False self.asyncwriter.dt.dropconnection() return else: rdf=element #TODO: Remove the two following lines #import sys #sys.stderr.write(str(rdf)) self.asyncwriter.rdf = rdf self.asyncwriter.writeRDF() class DBServer: def __init__(self,writeRDFTriple, host,username,password,database,rdfmodel): self.numthreads = 1 self.threadpool=[] self.threadpool = [DBPool(writeRDFTriple, host,username,password,database,rdfmodel) for i in range(self.numthreads)] [i.start() for i in self.threadpool] def writeRDF(self,rdf): anythread = self.threadpool[random.randint(0,self.numthreads-1)] anythread.writerdf(rdf) def join(self): self.stop() num = 0 for i in self.threadpool: #print 'Trying to Join DB',(num+1) i.join() num += 1 #print 'Joining DB:',num def stop(self): num = 0 for i in self.threadpool: i.stop() num += 1 #print 'Stopping DB:',num def empty(): return None if __name__ == "__main__": dbserver = DBServer(empty, 'localhost','rdf','rdf','test','test') dbserver.join()