使用Async / Await和Pickle

时间:2017-06-04 20:57:54

标签: python python-3.x asynchronous async-await python-3.5

我是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上的整个循环块是否会被阻止?出于实际目的,对于较小的物体,这种瞬间阻挡是否可以接受?谢谢!

1 个答案:

答案 0 :(得分:4)

应该阻止进行pickle,因为如果你的类中的另一个方法可以执行并修改valueset()仍在处理pickle.dumps(),那么pickle数据将会腐败。

即使该对象一次只有一个实例,这也适用。

get()中,您可以为await添加return pickle.loads(data),因为您还不太可能修改尚未退出该方法的数据。