【非同期処理】Pythonの async / await 構文を使ってみよう!
Summary
TLDRこのビデオはPythonの非同期処理について解説しています。非同期処理とは処理の完了を待たずに別の処理を実行できる機能で、入出力処理などにおいて効果的です。ビデオではasyncioモジュールを使った非同期処理の基本的なコードの書き方と、タスクの並列実行、ギャザーによる複数の戻り値の取得などについて解説しています。そして実際にAzureファイルストレージからのファイルダウンロードを例にとって、非同期処理の実践的な利用法も紹介しています。
Takeaways
- 😀 非同期処理とは、処理の完了を待たずに別の処理を実行できること
- 😊 入出力に時間のかかる処理で非同期処理を利用することが多い
- 🤔 非同期処理は並列処理とは異なり、イベントループによって制御される
- 😯 コルーチンは処理を中断し、後から再開できる関数
- 😃 awaitでコルーチンを呼び出し、完了まで待つことができる
- 🙂 create_taskでタスクを生成し、複数のコルーチンを並列実行できる
- 🧐 gatherで複数のタスクやコルーチンをまとめて呼び出せる
- 🤩 run_in_executorで普通の関数を非同期処理として扱える
- 😮 wait_forでタイムアウトを設定し、処理を強制終了できる
- 👍 Azure SDKのような非同期ライブラリも扱える
Q & A
非同期処理とは何ですか?
-非同期処理とは、処理の完了を待たずに別の処理を並行して走らせることです。I/Oバウンドな処理で時間がかかる場合に利用されます。
非同期処理と並列処理はどう違うのですか?
-非同期処理は並列処理を簡単に扱えるようにしたものです。イベントループがタスクを制御してくれるので、細かいことを気にせずに並列処理を記述できます。
コルーチンとは何ですか?
-コルーチンとは、処理を途中で中断して後から再開できる関数のことです。非同期処理で利用されます。
なぜasyncioのsleepを使うのですか?
-asyncioのsleepはコルーチンなので、非同期処理でawaitできます。時間モジュールのsleepはコルーチンではないのでエラーになります。
gatherはどういう場合に使いますか?
-gatherは複数のコルーチンやタスクを平行実行し、それぞれの戻り値をまとめて受け取るために使います。平行処理結果を一度に取得したい時に利用します。
タスクとは何ですか?
-タスクはコルーチンをラップしたもので、これを使うことでコルーチンを平行処理できます。create_taskでタスクを生成します。
実際にファイルダウンロードで非同期処理を使うメリットは何ですか?
-ダウンロード処理に時間がかかる場合、逐次処理だとプログラム全体がブロックされます。非同期処理を使えば他の処理を並行で走らせられるので効率的です。
普通の関数を非同期処理で使うにはどうすればいいですか?
-loop.run_in_executorで指定した関数を非同期処理で使えるようにラップできます。スレッドプールやプロセスプールも指定できます。
タイムアウトを設定するにはどうしたらいいですか?
-asyncio.wait_forを使うと、指定した時間を超えたらタイムアウト例外を送出できます。長時間処理を強制終了させたい場合に利用します。
Windowsで実行する時の注意点は何ですか?
-Windowsの場合はイベントループポリシーをWindowsSelectorEventLoopPolicyに設定する必要があるようです。バグ回避のためです。
Outlines
This section is available to paid users only. Please upgrade to access this part.
Upgrade NowMindmap
This section is available to paid users only. Please upgrade to access this part.
Upgrade NowKeywords
This section is available to paid users only. Please upgrade to access this part.
Upgrade NowHighlights
This section is available to paid users only. Please upgrade to access this part.
Upgrade NowTranscripts
This section is available to paid users only. Please upgrade to access this part.
Upgrade NowBrowse More Related Video
【Pythonプログラミング】並列処理の基本を解説!マルチスレッド・マルチプロセスをconcurrent futuresで実装!
Introduction to Query Pipelines (Building Advanced RAG, Part 1)
How To Make ANY Function Asynchronous In Python 3.12
【Python入門 #5】リストと繰り返し | ループ処理をマスター
The Node.js Event Loop: Not So Single Threaded
Writing a Physics Engine from scratch - collision detection optimization
5.0 / 5 (0 votes)