query_id == query_id + 1"failed for function "memcached_get_by_key"'-6ren"> query_id == query_id + 1"failed for function "memcached_get_by_key"'-我有一个使用 pylibmc module 的 python 网络应用程序连接到 memcached 服务器。如果我用每秒一次或更慢的请求测试我的应用程序,一切正常。但是,如果我每秒发送多个请求,我的-6ren">
gpt4 book ai didi

python - pylibmc : 'Assertion "ptr->query_id == query_id + 1"failed for function "memcached_get_by_key"'

转载 作者:太空狗 更新时间:2023-10-30 00:03:43 26 4
gpt4 key购买 nike

我有一个使用 pylibmc module 的 python 网络应用程序连接到 memcached 服务器。如果我用每秒一次或更慢的请求测试我的应用程序,一切正常。但是,如果我每秒发送多个请求,我的应用程序就会崩溃,并且我会在日志中看到以下内容:

Assertion "ptr->query_id == query_id +1" failed for function "memcached_get_by_key" likely for "Programmer error, the query_id was not incremented.", at libmemcached/get.cc:107

Assertion "ptr->query_id == query_id +1" failed for function "memcached_get_by_key" likely for "Programmer error, the query_id was not incremented.", at libmemcached/get.cc:89

知道出了什么问题或如何解决吗?

我的代码是这样的:

self.mc = pylibmc.Client(
servers=[os.environ.get(MEMCACHE_SERVER_VAR)],
username=os.environ.get(MEMCACHE_USER_VAR),
password=os.environ.get(MEMCACHE_PASS_VAR),
binary=True
)

#...

if (self.mc != None):
self.mc.set(key, stored_data)

#...

page = self.mc.get(key)

最佳答案

这是一个线程问题。 pylibmc clients are not thread-safe .您应该转换代码以使用 ThreadMappedPool object以确保您为每个线程保持单独的连接。像这样:

mc = pylibmc.Client(
servers=[os.environ.get(MEMCACHE_SERVER_VAR)],
username=os.environ.get(MEMCACHE_USER_VAR),
password=os.environ.get(MEMCACHE_PASS_VAR),
binary=True
)
self.pool = pylibmc.ThreadMappedPool(mc)

#...

if (self.pool != None):
with self.pool.reserve() as mc:
mc.set(key, stored_data)

#...

if (self.pool != None):
with self.pool.reserve() as mc:
page = mc.get(key)

确保在线程结束时调用 self.pool.relinquish(),可能是在析构函数中!

(在我的例子中,这是因为我使用 cherrypy 作为我的网络服务器,而 cherrypy 默认生成 10 个单独的线程来处理请求。)

关于python - pylibmc : 'Assertion "ptr->query_id == query_id + 1"failed for function "memcached_get_by_key"',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12420007/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com