4
Python 3.5のコルーチンとフューチャー/タスクの違いは?
ダミー関数があるとしましょう: async def foo(arg): result = await some_remote_call(arg) return result.upper() 違いは何ですか: coros = [] for i in range(5): coros.append(foo(i)) loop = get_event_loop() loop.run_until_complete(wait(coros)) そして: from asyncio import ensure_future futures = [] for i in range(5): futures.append(ensure_future(foo(i))) loop = get_event_loop() loop.run_until_complete(wait(futures)) 注:この例では結果が返されますが、これは質問の焦点ではありません。戻り値が重要な場合は、のgather()代わりに使用してくださいwait()。 戻り値に関係なく、私は明快さを探していensure_future()ます。wait(coros)そして、wait(futures)コルーチンを実行し、そのとき、なぜコルーチンはに包まれるべき両方ensure_future? 基本的に、Python 3.5を使用して一連の非ブロッキング操作を実行する正しい方法(tm)はasync何ですか? 追加のクレジットについて、コールをバッチ処理する場合はどうなりますか?たとえば、some_remote_call(...)1000回呼び出す必要がありますが、同時接続数が1000のWebサーバー/データベースなどを壊したくありません。これはスレッドまたはプロセスプールで実行できますが、これを行う方法はありasyncioますか?