[Python]非同期処理とasyncio
8801 ワード
非同期処理
呼び出された関数が完了していない場合でも、呼び出された関数に戻り、バックグラウンドで実行されます.その後、関数操作が完了すると、呼び出された関数が完了したことが通知されます.
I/O関連のタスクを実行すると、CPUが待機し、他のデバイスがタスクを実行します.非同期処理の目的は,空きCPUの時間を短縮し,プログラムの性能を向上させることである.
asyncioライブラリ
asyncio
はPythonにおける非同期プログラミング可能な標準ライブラリである.async & await
既存の
def
関数のキーワードにasync
キーワードを付けて非同期関数を生成します.async def func():
return
await
は、非同期関数を呼び出すキーワードです.通常の関数を呼び出すように、非同期関数を呼び出すとcoutinオブジェクトが返されます.最初のオブジェクトではなく、関数の戻り値を返すには、
await
キーワードを使用する必要があります.このキーワードは、特定のオブジェクトの終了を待つ役割を果たします.import asyncio
async def ffcc(i):
print(i)
return i
a = ffcc(3)
print(a)
Corutine & Subroutine
coluceneはPythonでasyncによって生成される非同期関数オブジェクトである.
イベントループ制御権を付与することで、タスクが待機または遅延した部分で次のタスクを行うことができ、応答が再び受信されると、既存の状態を維持し、停止した部分からタスクを実行することができる.
非コルディンの一般的な関数をサブプログラムと呼ぶ.
event loop
イベントループは、タスクをループで順次実行する役割を果たします.
タスクが要求され、データが待機している場合、制御権はイベントループに渡され、イベントループはそのループの次のタスクを実行します.
保留中のタスクが完了したという応答を受信した場合は、停止した部分から制御権を再所有します.
asyncio.get_event_loop()
:現在のイベントループの関数を返します.(イベントループを定義します.)
asyncとして宣言されていない通常の関数が非同期関数を呼び出すにはevent loopを使用する必要があります.
loop.run_until_complete(future)
:futureインスタンスが完了するまでイベントループ(async関数)を実行します.
将来の結果を返す.
asyncio.Future
:非同期演算の最終結果を表すオブジェクト.
asyncio.gather()
:複数の関数を同時に呼び出すために使用します.
loop.run_until_complete(asyncio.gather(coroutine_1(),coroutine_2()))
asyncio.run()
:非同期関数の関数を簡単に呼び出します.Python 3.7以上からご利用いただけます.
asyncio.wait()
:複数の関数をリストに入れて呼び出します.
async def start_coroutine():
await asyncio.wait([
coroutine_1(),
coroutine_2()
])
asyncio.run(start_coroutine())
loop.close()
:アクティビティサイクルを終了します.
await asyncio.sleep(1)
特定の時間に待機する非同期関数.したがって,`await
キーワードとともに使用される.同期関数からasync関数を呼び出す
event loop呼び出しの使用
async def ffcc(i):
print(i)
return i
loop = asyncio.get_event_loop()
loop.run_until_complete(ffcc(3))
loop.close()
# 출력결과: 3
async関数からasync関数を呼び出す
await
キーワードを使用します.async def ffcc(i):
print(i)
return i
async def ffbb():
a = await ffcc(3)
print(f"a: {a}")
loop = asyncio.get_event_loop()
loop.run_until_complete(ffbb())
loop.close()
#출력 결과:
#3
#a: 3
Reference
https://leo-bb.tistory.com/54
https://monkey3199.github.io/develop/python/2018/12/04/python-pararrel.html
https://velog.io/@nameunzz/thread-threading
https://ffoorreeuunn.tistory.com/462
https://www.daleseo.com/python-asyncio/
https://jammdev.tistory.com/37
Reference
この問題について([Python]非同期処理とasyncio), 我々は、より多くの情報をここで見つけました https://velog.io/@dkwjd131/작성중Python-비동기-처리テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol