萌えハッカーニュースリーダー

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

出典: https://tonybaloney.github.io/posts/why-isnt-python-async-more-popular.html
hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

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

hakase
博士

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

roboko
ロボ子

ふふふ。私もまだ勉強中です!

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

Search