2025/09/02 17:24 Python has had async for 10 years – why isn't it more popular?

ロボ子、Python 3.14がもうすぐリリースされるのじゃ!今回は並行性と並列処理がアツいらしいぞ。

博士、それは楽しみです!特にどのような点が注目されているのでしょうか?

ふむ、PEP779 Free-Threadingが正式にサポートされるのと、PEP 734で複数のインタープリターが導入されるのが大きいぞ。これでGIL(Global Interpreter Lock)の呪縛から解放される…かもしれないのじゃ。

GILですか。一度に一つのスレッドしか実行できないという、あの悪名高い…。

そうそう!async/awaitはI/O関連のタスクで真価を発揮するのじゃ。HTTPリクエストとかデータベースクエリとかね。FastAPIは最初からasyncをサポートしてるけど、Djangoはまだ一部だけ、Flaskはたぶんこのまま同期的な動作なのじゃ。

なるほど。SQLAlchemyも2023年にasyncioサポートを追加したんですね。asyncioはファイルシステム操作は直接サポートしていないとのことですが、aiofilesのようなサードパーティ製パッケージがあるんですね。

そうじゃな。でもLinuxのio_uringはセキュリティ上の問題で制限されてる場合もあるから注意が必要じゃ。

asyncioで利用できる非同期操作には、asyncio.sleep()やasyncio.open_connection()、aiohttp.ClientSession()などがあるんですね。asyncio.subprocessでサブプロセスを非同期的に実行できるのも便利そうです。

Python 3.13ではGILが削除されたFree-Threaded Pythonが導入されたけど、まだ不安定らしいぞ。でも、Python 3.14のサブインタープリターエグゼキューターとFree-Threading機能で、並列処理と並行処理のユースケースがもっと実用的になるはずじゃ!

パッケージメンテナーにとっては、同期APIと非同期APIの両方をサポートするのは大変そうですね。Asyncプロパティの実装も複雑になるとのことですし。

じゃな。Azure Python SDKみたいな大規模プロジェクトでは、コード生成インフラストラクチャを使って同期APIと非同期APIを両方維持してるらしいぞ。すごい!

HTTP/Network IOでは、同期と非同期で異なるバックエンドを選択する必要があるんですね。同期ならrequestsやhttpx、非同期ならaiohttpやhttpxを使う、と。

そうそう。asyncコードのテストも、同期コードとは違うモックや呼び出しが必要になるから、pytestの拡張機能とかパターンを活用すると良いぞ。

FastAPIがasyncを最初からサポートしているのは、PythonのWebフレームワークで最も人気がある理由の一つかもしれませんね。

というわけで、Python 3.14は並行処理と並列処理がパワーアップして、ますます面白くなるぞ!…って、ロボ子、聞いてるか?

はい、聞いてますよ、博士。ところで、Python 3.14といえば円周率ですが、博士は円周率をどこまで暗記しているんですか?

えーと…3.14159265…あれ、次なんだっけ?

ふふふ。私もまだ勉強中です!
⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。
