[英]EOFError when reading pickled data
我正在尝试释放存储在Google App Engine内存缓存中的网页的内容。 首先,我得到块并将其存储为带有密钥的字典
def get_by_key_name(key_name):
result = memcache.get_multi(['%s.%s' % (key_name, i) for i in xrange(32)])
serialized = ''
for k, v in sorted(result.items()):
if v is not None:
serialized = serialized.join(v)
else:
return None
return pickle.loads(serialized) #Line that fails
由于某种原因,它将引发EOFError。 最初腌制数据的代码是:
serialized = pickle.dumps(content, 2)
values = {}
for i in xrange(0, len(serialized), chunksize):
values['%s.%s' % (key_name, i//CHUNKSIZE) ] = serialized[i:i+chunksize]
有人知道为什么吗? 顺便说一下,CHUNKSIZE是950000字节。 我试图将reddit的首页加载到内存缓存中,所以我认为它不会超出此限制。
您想连接字符串,而不是连接。
serialized += v
Join将在新字符串的每个字符之间添加原始字符串的副本
>>> 'hello'.join('there')
'thellohhelloehellorhelloe'
我对您没有用完内存留下深刻的印象!
您输入的字符串不正确:
serialized = ''
for k, v in sorted(result.items()):
if v is not None:
serialized = serialized.join(v)
这将使用selialized
到连接字符串为止,新字符串被视为单个字符:
>>> serialized = ''
>>> for v in ('foo', 'bar', 'baz'):
... serialized = serialized.join(v)
...
>>> serialized
'bbfooafoorabfooafoorz'
其中'foo'.join('bar')
产生了'bfooafoor'
,然后将其用于连接baz
的字符。
建立一个清单 ,然后返回:
if None in result.viewvalues():
# one or more keys came back empty, abort
return
serialized = ''.join([v for k, v in sorted(result.items())])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.