簡體   English   中英

ResourceWarning:python-memcached沒有關閉套接字?

[英]ResourceWarning: python-memcached not closing socket?

我正在使用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中沒有任何相關問題,所以我的假設是我缺少一些簡單的東西。

是的,pymemcached客戶端有一個close方法: https ://pymemcache.readthedocs.io/en/latest/apidoc/pymemcache.client.base.html#pymemcache.client.base.Client.close

或者你可以寫自己的經理:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM