首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ResourceWarning: python-memcached没有关闭套接字?

ResourceWarning: python-memcached没有关闭套接字?
EN

Stack Overflow用户
提问于 2017-05-25 23:02:58
回答 1查看 521关注 0票数 2

我正在使用Python3.6.1运行一些单元测试,并获得了一个ResourceWarning

代码语言:javascript
复制
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。相关代码如下:

代码语言:javascript
复制
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中也没有任何相关的问题,所以我的假设是我遗漏了一些简单的东西。

EN

回答 1

Stack Overflow用户

发布于 2018-10-25 10:23:07

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

或者你可以编写你自己的管理器:

代码语言:javascript
复制
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()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44183761

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档