Twisted的通用连接池库
项目描述
Twisted的通用连接池库。
示例描述
假设我们有一个Web应用程序,它执行一些昂贵的计算,然后将它们缓存到一个memcached服务器中。在Twisted中实现这一点的简单方法是创建一个ClientCreator用于MemCacheProtocol,并且每当我们需要与服务器通信时,我们可以简单地使用它。
这对于查询量较低的情况有效,但假设我们现在开始大量地访问memcached - 每个Web请求中都有很多次,我们每秒都接收到很多。很快,连接开销就会成为一个问题。
而不是为每个查询创建新的连接,维护一个打开的连接池会更好,简单重用这些打开的连接;如果所有连接都在使用中,则排队任何查询。使用txconnpool,设置这可以相当简单。
示例实现
首先我们需要创建一些模板类,将MemCacheProtocol转换为PooledMemcachedProtocol,然后创建一个池
from twisted.protocols.memcache import MemCacheProtocol
from txconnpool.pool import PooledClientFactory, Pool
class PooledMemCacheProtocol(MemCacheProtocol):
"""
A MemCacheProtocol that will notify a connectionPool that it is ready
to accept requests.
"""
factory = None
def connectionMade(self):
"""
Notify our factory that we're ready to accept connections.
"""
MemCacheProtocol.connectionMade(self)
self.factory.connectionPool.clientFree(self)
if self.factory.deferred is not None:
self.factory.deferred.callback(self)
self.factory.deferred = None
class MemCacheClientFactory(PooledClientFactory):
protocol = PooledMemCacheProtocol
class MemCachePool(Pool):
clientFactory = MemCacheClientFactory
def get(self, *args, **kwargs):
return self.performRequest('get', *args, **kwargs)
def set(self, *args, **kwargs):
return self.performRequest('set', *args, **kwargs)
def delete(self, *args, **kwargs):
return self.performRequest('delete', *args, **kwargs)
def add(self, *args, **kwargs):
return self.performRequest('add', *args, **kwargs)
现在,创建完成后,我们可以继续使用它
from twisted.internet.address import IPv4Address
addr = IPv4Address('TCP', '127.0.0.1', 11211)
mc_pool = MemCachePool(addr, maxClients=20)
d = mc_pool.get('cached-data')
def gotCachedData(data):
flags, value = data
if value:
print 'Yay, we got a cache hit'
else:
print 'Boo, it was a cache miss'
d.addCallback(gotCachedData)
项目详情
关闭
txconnpool-0.1.1.tar.gz的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | baf2a39de891049e0255dab80fe67ad14fde5dfd2295e01605dd915729a3eeef |
|
| MD5 | f9fc3689820b10138a6c317f1dcc9083 |
|
| BLAKE2b-256 | ed93a3b82d215b0416ff159a6481c5a4cef3f0d92cec4b07b0f04817e54a9c4f |