async def ステートメントを使用する必要があります
コルーチンでできること:
1. 将来の結果を待ちます
2 、別のコルーチンを待ちます (結果を生成するか、例外を発生させます)
3. 待機しているコルーチンに結果を生成します
4. 待機しているコルーチンに例外をスローしますit プログラム
コルーチン関数を呼び出します。コルーチンは実行を開始せず、コルーチン オブジェクトを返すだけです
コルーチンを実行するには 2 つの方法がありますオブジェクト メソッド:
1. await
を使用して、すでに実行中の別のコルーチン
2. ensure_future
関数を通じて実行を計画します
特定のスレッドのループが実行されている場合にのみ、コルーチンを実行できます。
次の例:
まず、現在のスレッドのデフォルト ループを取得し、次に、コルーチン オブジェクトloop.run_until_complete に渡されると、コルーチン オブジェクトはループ内で実行されます
loop = asyncio.get_event_loop() loop.run_until_complete(do_some_work(3))
run_until_complete
はブロッキング呼び出しであり、コルーチンの実行が終了するまで戻りません
パラメーターは Future ですが、それに渡すのはコルーチン オブジェクトです。内部チェックが行われ、ensure_future 関数を通じてコルーチン オブジェクトを Future にラップします。
次のように記述できます:
loop.run_until_complete(asyncio.ensure_future(do_some_work(3)))
複数のコルーチンがループ内で実行されます。複数のコルーチンをループに渡すには、asyncio.gathre
関数#を使用する必要があります。 ##
loop.run_until_complete(asyncio.gather(do_some_work(1), do_some_work(3)))
loop = asyncio.get_event_loop() #获取当前线程loop coros_list = [] for i in range(2000): coros_list.append(main(i)) loop.run_until_complete(asyncio.gather(*coros_list))
loop = asyncio.get_event_loop() #获取当前线程loop loop.run_until_complete(do_some_work(loop, 1)) loop.run_until_complete(do_some_work(loop, 3)) loop.close()
loop = asyncio.get_event_loop() #获取当前线程loop loop.run_until_complete(do_some_work(loop, 1)) loop.close() loop.run_until_complete(do_some_work(loop, 3)) # 此处异常
def done_callback(futu): print('Done') futu = asyncio.ensure_future(do_some_work(3)) futu.add_done_callback(done_callback) loop.run_until_complete(futu)
asyncio.get_running_loop() # 返回当前os线程中正在运行的事件循环 asyncio.get_event_loop() # 获取当前事件循环 asyncio.set_event_loop(loop) # 获取当前事件循环 asyncio.new_event_loop() # 创建并返回一个新的事件循环对象
asyncio.get_event_loop()If:
loop = asyncio.new_event_loop() asyncio.set_event_loop(loop)
以上がPythonのasyncio共通関数の使い方は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。