我是async
/ await
的新手,我遇到了一些困惑。 pickle
应该以某种方式await
编辑吗?
例如,假设我有以下async
类方法:
async def get(self, key):
redis = await self.getRedis()
data = await redis.get(key)
if not data:
return None
return pickle.loads(data)
async def set(self, key, value, ttlInSeconds):
pickled = pickle.dumps(value)
redis = await self.getRedis()
await redis.setex(key, pickled, ttlInSeconds)
如果我正在序列化或反序列化大型对象,那么pickle
上的整个循环块是否会被阻止?出于实际目的,对于较小的物体,这种瞬间阻挡是否可以接受?谢谢!
答案 0 :(得分:4)
你应该阻止进行pickle,因为如果你的类中的另一个方法可以执行并修改value
而set()
仍在处理pickle.dumps()
,那么pickle数据将会腐败。
即使该对象一次只有一个实例,这也适用。
在get()
中,您可以为await
添加return pickle.loads(data)
,因为您还不太可能修改尚未退出该方法的数据。