2015-12-23 17 views
7

私はPython 3でasyncioモジュールについて、そしてより広範にはPythonでコルーチンを読んできましたが、asyncioをこのような素晴らしいツールにすることはできません。 私はコルーチンでできることはすべて、マルチプロセッシングモジュール(セロリなど)に基づいたタスクキューを使用することでより効果的だと感じています。 コルーチンがタスクキューより優れている用途はありますか?asyncioとcoroutines対タスクキュー

答えて

9

ない適切な答えが、コメントに収まることができませんでしたヒントのリスト:あなたがmultiprocessingモジュールに言及している

  • (とのがあまりにもthreadingを考えてみましょう)。何百ものソケットやソケットを処理する必要があるとします。何百ものプロセスやスレッドを生成できますか?

  • またスレッドとプロセス:共有リソースへの同時アクセスをどのように処理しますか?ロックのようなメカニズムのオーバーヘッドは何ですか?

  • セロリのようなフレームワークも重要なオーバーヘッドを追加します。あなたはそれを使用できますか?トラフィックが多いWebサーバー上でを毎回処理するために?ちなみに、そのシナリオでは、ソケットと接続を処理する責任は誰にありますか(セロリはその性質上、あなたのためにできません)?

  • 必ずthe rationale behind asyncioをお読みください。その根拠(他のものの中でも)は、writev()というシステムコールに言及しています - 複数のwrite()よりもはるかに効率的ではありませんか?上記の回答に追加

1

:手元のタスクはI/Oバウンドで、共有データ、コルーチンとasyncio上で動作する場合

はおそらく行く方法です。

一方、データが共有されていないCPUバインドタスクがある場合は、Celeryのようなマルチプロセッシングシステムが優れているはずです。

CPUとI/Oバウンドの両方でデータを共有する必要がない場合は、引き続きCeleryを使用します。セロリー内からの非同期I/Oを使用できます。

CPUにバインドされたタスクがありますが、データを共有する必要がある場合は、共有データをデータベースに保存するだけです。 pyparallelのような最近の試みがありましたが、まだ進行中です。

関連する問題