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))