[Twisted-python] help about create a tcp connection pool using twisted
Phil Mayers
p.mayers at imperial.ac.uk
Thu Jul 24 05:41:33 MDT 2008
陳毅泰 wrote:
> Hi, if I want to make a tcp connection pool by twisted, how can I do
> that?? I am confuse about what should I keep?? The procotol instance
> or something else, thanks a lot...
Yes, you'd keep a number of protocol instances. So for example:
from twisted.internet import protcol, reactor
class MyPool:
max_connections = 16
def __init__(self, host, port, prot_class, *p, **kw):
self.host = host
self.port = post
self.factory = protocol.ClientCreator(reactor, prot_class, *p, **kw)
self.connections = {}
self.in_use = {}
def doSomething(self, *p, **kw):
# find a free protocol
for id, instance in self.connections.items():
if id in self.in_use:
continue
return self.got_conn(instance, id, *p **kw)
# no free ones, create a new one
for id in range(self.max_connections):
if id in self.connections:
continue
d = self.factory.connectTCP(self.host, self.port)
d.addCallback(self.got_conn, id, *p, **kw)
return d
raise Exception('pool full')
def got_conn(self, proto, id, *p, **kw):
self.connections[id] = proto
self.in_use[id] = True
d = proto.doSomething(*p, **kw)
d.addBoth(self.done, id)
def done(self, r, id):
del self.in_use[id]
return r
More information about the Twisted-Python
mailing list