ResourceWarning: python-memcached не закрывающий сокет?
Я запускаю несколько юнит-тестов с Python 3.6.1 и получаю ResourceWarning
ResourceWarning: unclosed <socket.socket fd=14, family=AddressFamily.AF_INET, type=SocketKind.SOCK_STREAM, proto=0, laddr=('127.0.0.1', 54897), raddr=('127.0.0.1', 11211)>
Порт и область кода указывают, что это memcached
и я использую python-memcached
1.5.8. Соответствующий код здесь:
if use_caching:
import memcache
mc = memcache.Client(['127.0.0.1:11211'], debug=0)
key = 'descendent-catalog-ids-{0}'.format(str(cat_id))
catalog_ids = mc.get(key)
if catalog_ids is None:
catalog_ids = get_descendent_ids(hierarchy_session)
mc.set(key, catalog_ids)
else:
catalog_ids = get_descendent_ids(hierarchy_session)
Я должен вручную закрыть memcached Client
экземпляр как-то? Я не могу найти никаких ссылок в исходном коде или документах о закрытии сокета вручную, поэтому я предположил, что библиотека будет обрабатывать это автоматически...
Я не нашел ни одного подобного вопроса (только один для urllib), и в GitHub нет соответствующих проблем, поэтому я предполагаю, что я упускаю что-то простое.
1 ответ
Да, есть метод закрытия для клиента pymemcached: https://pymemcache.readthedocs.io/en/latest/apidoc/pymemcache.client.base.html
Или вы можете написать свой собственный менеджер:
class Cache(object):
"""
General caching wrapper for accessing shared objects across machines or processes
"""
def __init__(self):
self.client = None
self._host = os.environ["MEMCACHED_HOST"]
self._port = 11211
def __enter__(self):
self.client = base.Client((self._host, self._port))
return self.client
def __exit__(self, type, value, traceback):
self.client.close()