Connection and Producer Pools
官网文档只能说写的很 low
让咱们本人从代码中发现原理吧
from kombu.pools import connectionsfrom kombu import Connectionuri = 'amqp://guest:[email protected]:5672//'connection = Connection(uri)with connections[connection].acquire(block=True) as conn: assert conn == connection
首先这玩意不是一个保险柜
site-packages/kombu/pools.py
class Connections(PoolGroup): """Collection of connection pools.""" def create(self, connection, limit): return connection.Pool(limit=limit)connections = register_group(Connections(limit=use_global_limit))
site-packages/kombu/pools.py
def register_group(group): """Register group (can be used as decorator).""" _groups.append(group) return group
site-packages/kombu/pools.py
class PoolGroup(EqualityDict): """Collection of resource pools.""" def __init__(self, limit=None, close_after_fork=True): self.limit = limit self.close_after_fork = close_after_fork if self.close_after_fork and register_after_fork is not None: register_after_fork(self, _after_fork_cleanup_group) def create(self, resource, limit): raise NotImplementedError('PoolGroups must define ``create``') def __missing__(self, resource): limit = self.limit if limit is use_global_limit: limit = get_limit() k = self[resource] = self.create(resource, limit) return k
site-packages/kombu/utils/collections.py
class EqualityDict(dict): """Dict using the eq operator for keying.""" def __getitem__(self, key): h = eqhash(key) if h not in self: return self.__missing__(key) return super().__getitem__(h) def __setitem__(self, key, value): return super().__setitem__(eqhash(key), value) def __delitem__(self, key): return super().__delitem__(eqhash(key))