私はasyncio
のPythonドキュメントを調べていましたが、ほとんどの例がAsyncio.ensure_future()
ではなくloop.run_until_complete()
を使用する理由が不思議です。ほとんどのasyncioの例でloop.run_until_complete()を使用するのはなぜですか?
例えば:https://docs.python.org/dev/library/asyncio-task.html
ensure_future
が非ブロッキング機能の利点を実証するためのより良い方法だろうと思われます。一方、run_until_complete
は、同期関数のようにループをブロックします。
ensure_future
とloop.run_forever()
の組み合わせの代わりにrun_until_complete
を使用して、複数のコルーチンを同時に実行する必要があるように感じます。
'run_until_complete'は何もブロックしません。これと 'run_forever'の違いは、コルーチンの終了時にループが一時停止することです。それがブロックする唯一の時間は、あなたのコルーチンが決して待たなければならない場合です。 – dirn
私はこのhttp://pastebin.com/Qi8dQ3bhを書きましたが、ループをブロックするようです。 'do_other_things()'は 'do_io()'がスリープを待っていても、 'do_io()'が終了するまで実行されません。 – SamuelN
これはループでスケジュールされたものが他にないためです。 'run_forever'を呼び出す前に' loop.create_task(do_other_things()) 'を呼び出すことを試みてください。 – dirn