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))gather は集約の役割を果たし、複数の Future を 1 つの Future にパッケージ化します。これは、loop.run_until_complete が受け入れるのは一つの未来。 loop.close()について簡単に言えば、ループが閉じられていない限り、ループは実行できます。 :
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)) # 此处异常Callbackコルーチンへの参加は IO 読み取り操作です。データの読み取りが完了すると、データのさらなる処理については通知を希望します。これは、future にコールバックを追加することで実現できます
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)イベント ループイベント ループは非同期タスクとコールバックを実行し、ネットワーク IO 操作を実行し、子プロセスを実行します asyncio イベント ループから ポリシー文書では、イベント ループ ポリシーがプロセス内のすべてのイベント ループの管理を制御するプロセス グローバル オブジェクトであることがわかりました。 プロセスのグローバル ポリシーは、ポリシーによって制御されるコンテキストの意味を定義し、各コンテキストで個別のイベント ループを管理します。デフォルト ポリシーによって定義されたコンテキストは現在のスレッドです。つまり、異なるスレッドが存在します。コンテキストが異なると、イベント ループも異なります。 イベント ループを取得します
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 サイトの他の関連記事を参照してください。