python memcached无法获取或设置“JAC_SF”
在检查了一大堆东西之后,我发现对于一些密钥,python memcached无法获取,或者无法在我的机器上设置它们:Mac OSX 10.9、自制memcache 1.4.15、pip安装的python memcached 1.53。我的第一个问题是在黑暗中拍摄,不清楚发生了什么,但经过更多的挖掘,我现在肯定现在 一切都取决于你 def_get_serverself,键: 如果我们添加两个调试打印输出行python memcached无法获取或设置“JAC_SF”,python,memcached,python-memcached,Python,Memcached,Python Memcached,在检查了一大堆东西之后,我发现对于一些密钥,python memcached无法获取,或者无法在我的机器上设置它们:Mac OSX 10.9、自制memcache 1.4.15、pip安装的python memcached 1.53。我的第一个问题是在黑暗中拍摄,不清楚发生了什么,但经过更多的挖掘,我现在肯定现在 一切都取决于你 def_get_serverself,键: 如果我们添加两个调试打印输出行 def _get_server(self, key): if isinstance(
def _get_server(self, key):
if isinstance(key, tuple):
serverhash, key = key
else:
serverhash = serverHashFunction(key)
for i in range(Client._SERVER_RETRIES):
server = self.buckets[serverhash % len(self.buckets)]
if server.connect():
#print "(using server %s)" % server,
print 'got server {} for {}'.format(serverhash % len(self.buckets),
key)
return server, key
print 'server {} failed for {}'.format(serverhash % len(self.buckets),
key)
serverhash = serverHashFunction(str(serverhash) + str(i))
return None, None
试图获取或设置“NFL::CAR_TB”键
import memcache
mc_cl = memcache.Client('127.0.0.1')
mc_cl.set('JAC_SF', 1)
mc_cl.get('JAC_SF')
mc_cl.set('UAC_SF', 1)
mc_cl.get('UAC_SF')
结果,在我的机器上
server 3 (inet:.:11211 (dead until 1384821475)) failed for JAC_SF
server 7 (inet:.:11211 (dead until 1384821475)) failed for JAC_SF
server 3 (inet:.:11211 (dead until 1384821475)) failed for JAC_SF
server 2 (inet:7:11211 (dead until 1384821475)) failed for JAC_SF
server 5 (inet:.:11211 (dead until 1384821475)) failed for JAC_SF
server 7 (inet:.:11211 (dead until 1384821475)) failed for JAC_SF
server 3 (inet:.:11211 (dead until 1384821475)) failed for JAC_SF
server 7 (inet:.:11211 (dead until 1384821475)) failed for JAC_SF
server 7 (inet:.:11211 (dead until 1384821475)) failed for JAC_SF
server 2 (inet:7:11211 (dead until 1384821475)) failed for JAC_SF
server 3 (inet:.:11211 (dead until 1384821475)) failed for JAC_SF
server 7 (inet:.:11211 (dead until 1384821475)) failed for JAC_SF
server 3 (inet:.:11211 (dead until 1384821475)) failed for JAC_SF
server 2 (inet:7:11211 (dead until 1384821475)) failed for JAC_SF
server 5 (inet:.:11211 (dead until 1384821475)) failed for JAC_SF
server 7 (inet:.:11211 (dead until 1384821475)) failed for JAC_SF
server 3 (inet:.:11211 (dead until 1384821475)) failed for JAC_SF
server 7 (inet:.:11211 (dead until 1384821475)) failed for JAC_SF
server 7 (inet:.:11211 (dead until 1384821475)) failed for JAC_SF
server 2 (inet:7:11211 (dead until 1384821475)) failed for JAC_SF
server 7 (inet:.:11211 (dead until 1384821475)) failed for UAC_SF
got server 6 for UAC_SF
server 7 (inet:.:11211 (dead until 1384821475)) failed for UAC_SF
got server 6 for UAC_SF
如果我把服务器改成
def _get_server(self, key):
choices = range(len(self.buckets) - 1)
random.shuffle(choices)
if isinstance(key, tuple):
choice, key = key
else:
choice = choices.pop()
for _ in range(Client._SERVER_RETRIES):
server = self.buckets[choice]
if server.connect():
#print "(using server %s)" % server,
print 'got server {} for {}'.format(choice,
key)
return server, key
print 'server {} ({}) failed for {}'.format(choice, server, key)
choice = choices.pop()
return None, None
那么一切都会好得多
got server 4 for JAC_SF
server 0 (inet:1:11211 (dead until 1384821552)) failed for JAC_SF
server 3 (inet:.:11211 (dead until 1384821552)) failed for JAC_SF
got server 4 for JAC_SF
server 7 (inet:.:11211 (dead until 1384821552)) failed for UAC_SF
server 0 (inet:1:11211 (dead until 1384821552)) failed for UAC_SF
got server 6 for UAC_SF
server 7 (inet:.:11211 (dead until 1384821552)) failed for UAC_SF
server 2 (inet:7:11211 (dead until 1384821552)) failed for UAC_SF
server 5 (inet:.:11211 (dead until 1384821552)) failed for UAC_SF
server 1 (inet:2:11211 (dead until 1384821552)) failed for UAC_SF
got server 6 for UAC_SF
在python程序中设置多个键时,我得到了非常不一致的结果,
导入memcache
两小时=2*60*60
mc_cl=memcache.Client'127.0.0.1'
映射={…}
mc_cl.flush_all
ret=mc\u cl.set\u multimapping=mapping,time=2小时
getret=mc_cl.get_multimapping.keys
如果lenmapping!=长度组:
打印“未设置”\n\t{}。格式为“\n\t”。为中的k连接[strk,映射[k]
[a用于mapping.keys中的a
如果在getret.keys中没有
在分析原始memcache输出之后,似乎并不是所有的键都被设置,也不是所有的键都被请求。在Mac OSX 10.9上,在自制和pip上完成所有事情并保持最新。
下面的Memcache output and reading表示,仅尝试写入和读取101个键,而有228个项。
进口稀土
gamesSet=[]
gamesGet=[]
将打开的'memout.log'作为f:
对于f.read.split'\n'中的行:
匹配=重新匹配“^21”确定
22好的
21存储
这是一个奇怪的问题,我目前正在与python memcached库的编写者/维护者争论 随机的,这里的错误是第一行
mc_cl = memcache.Client('127.0.0.1')
客户端需要一个iterable,但不确保检查它是否得到字符串,因此以一种非常python的方式,它将此字符串视为一个iterable并对其进行迭代,将“1”、“2”、“7”和“0”中的每一个设置为memcached服务器的IP地址,但真正令人困惑的是“0”实际上是一个有效的IP地址,计算结果为0.0.0.0,并由本地memcached服务器提供服务,如果您是这样设置的,那么我的开发环境就是这样设置的
如果你把它改成
mc_cl = memcache.Client(('127.0.0.1',))
一切工作都完全按照预期进行,但是如果您传入“127.0.0.1”字符串,您不会收到任何错误消息,也不会收到任何未设置密钥的报告,也不会收到“获取”的报告,只是上述非常不稳定和无法解释的行为