非同期リクエストを実行するための Python Celery とスレッドライブラリの比較 [closed] 質問する

非同期リクエストを実行するための Python Celery とスレッドライブラリの比較 [closed] 質問する

大量のデータを解析する Python メソッドを実行しています。時間がかかるため、ユーザーが引き続き Web サイト/UI にアクセスできるように、別のスレッドで非同期的に実行したいと思います。

「from threading import thread」モジュールを使用するスレッドは、ユーザーがサイトを終了した場合に終了しますか、それともサーバー上で実行され続けますか?

このような場合に、単にスレッド モジュールを使用するのではなく、Celery を使用することの利点は何でしょうか?

ベストアンサー1

Pythonインタプリタは、(悪名高い)グローバルインタープリタロック別名 (GIL)。したがって、Python のスレッド化は、計算と IO が同時に発生する場合にのみ並列処理を提供します。少なくとも CPython 2 または 3 では、計算にバインドされたタスクは、Python スレッド化モデルのスレッド化によるメリットをほとんど得られません。

一方、これらの制限は、Celery のようなキューイング システムで行うマルチプロセスには適用されません。マルチコア マシン、または複数のマシンで同時に実行できる Python のワーカー インスタンスを複数実行できます。

あなたのシナリオを理解している限り、つまり Web サイトでのやり取りによって長時間実行されるジョブが開始されるのであれば、キューイングがほぼ間違いなく最適な方法です。真の並列処理と、処理を他のマシンに移動する簡単なオプションが得られます。

おすすめ記事