2016-05-18 5 views
1

asyncioに基づいて私のライブラリにフェアキューイングを実装しようとしています。いくつかの機能でasyncio.waitオーダーは保証されていますか?

、私は(socketXが作業していると仮定)のような文があります。

done, pending = asyncio.wait(
    [socket1, socket2, socket3], 
    return_when=asyncio.FIRST_COMPLETED, 
) 

を今私はasyncio.wait何回ものマニュアルを読んで、それは私が後だな情報が含まれていません。

  • socket1socket2socket3は私が呼び出しを発行したとき、すでに準備ができて起こった:主に、私はかどうかを知りたいのですが。 doneにすべてが含まれることが保証されているのですか、それとも1つ(または2つ)しか返されないのでしょうか?
  • 2番目のケースでは、wait()に渡されるタスクの順序は関係ありますか?私はまた、順序を気にする必要がある場合、私はちょうど(ものを選ぶと、後で解決のために他のタスクを残すことによって)doneタスクのセットに公正キューイングを適用することができるかどうか断言またはしようとしている

I

ドキュメントはこれについて少し黙っています。何か案が ?

答えて

4

これは、Python 3.5のsource codeに基づいています。

将来はwaitを呼び出す前に行われた場合、それらはすべてdoneセットに配置されます。

import asyncio 

async def f(n): 
    return n 

async def main(): 
    (done, pending) = await asyncio.wait([f(1), f(2), f(3)], return_when=asyncio.FIRST_COMPLETED) 
    print(done)  # prints set of 3 futures 
    print(pending) # prints empty set 

loop = asyncio.get_event_loop() 
loop.run_until_complete(main()) 
loop.close() 
+0

私もそれを試してみたが、Pythonのソースコードをチェックするために私には発生しませんでした。十分な睡眠ではないと思います。あなたの側でそれを試してくれてありがとう。私たちが結論づけることができることは、常にそのように動作するという保証はないが、現在の実装はすべてのプラットフォームでそうであるということである。 – ereOn

関連する問題