2017-06-04 9 views
0

私はasync/awaitを初めて使用しています。少し混乱しました。 pickleawaitになるはずですか?私はpickleに、ループ全体のブロックをシリアル化しませんかラージオブジェクトをunserializingてる場合ピンクで非同期/待機を使用する

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) 

:たとえば

は、私は以下のasyncクラスメソッドを持っていると言いますか?現実的な目的のために、より小さなオブジェクトでは、この瞬間的なブロックは許容されますか?ありがとう!

答えて

3

あなたはまだpickle.dumps()を処理しているvalueset()ながら、あなたのクラスの別の方法は、その後、実行して、修正することができるので、場合酸洗にをブロックする必要があり、漬けデータが破損している可能性があります。

これは、そのオブジェクトが一度に1つのインスタンスしか持たない場合でも、適用されます。

Btwがget()の場合は、return pickle.loads(data)awaitを入力すると、まだそのメソッドから返されていないデータは変更されない可能性があります。

+0

私は、ありがとう!私はあまりにも真剣に非同期についての "すべてか何か"のアドバイスを取ったと思う。私は 'run_in_executor()'にすべてのブロッキングコードが必要だったという印象を受けました。 – Will

関連する問題