我是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
上阻塞吗?出于实际目的,对于较小的物体,这种短暂的阻塞可以接受吗?谢谢!
最佳答案
您应该阻止酸洗,因为如果您的类中的另一个方法可以在set()
仍在处理时执行并修改value
pickle.dumps()
,pickle 的数据将会损坏。
即使该对象一次肯定只有一个实例,这一点也适用。
顺便说一句,在 get()
中,您可以将 await
放在 return pickle.loads(data)
中,因为您不太可能修改尚未从该方法返回的数据。
关于python - 将 Async/Await 与 Pickle 结合使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44358705/