Geventと互換性のある労働者プロセスのプールを実装する最良の方法は何ですか?

StackOverflow https://stackoverflow.com/questions/5360050

質問

シナリオ

PythonとGeventに実装されたサーバープロセスがあります。これは、TCP/IPを介したバックエンドサービスに接続し、バックエンドサービスによって提供される変更に基づいて、急速に変更された動的コンテンツを使用して多くのWebクライアント(プロセスごとに約1000)にサービスを提供しています。サービスはUbuntu 10.04で実行されており、Windowsで実行されないため、ターゲットプラットフォームは固定されています。現在、Python 2.6.6を使用しています。

問題

多くのクライアントへの変更を提供することで、バックエンドによって送信された変更の処理に遅れを起こす可能性があるため、私の計画はサーバーを複数のプロセスに分割することです。多くのワーカープロセスがWebクライアントにサービスを提供しますが、メインプロセスは引き続きバックエンドサービスに接続されます。私はすでにWebクライアントにサービスを提供するためにグリーンレットの別のプールを使用していますが、ワーカープロセスに入れる必要があります。

質問

Geventの作業プロセスプールの実装を指摘したり、GeventでPython独自のマルチプロセッシングモジュールを正しい方法で使用するにはどうすればよいですか?

制限

Pythonスレッドをプロセスに導入することを避けたいと思います。なぜなら、それはギルの競合の余地を与え、レイテンシーを導入することでパフォーマンスを減らすからです。したがって、可能であれば、きれいなマルチプロセッシング + Geventソリューションになります。

役に立ちましたか?

解決

見てみることをお勧めします セロリ -Pythonで記述された分散タスク処理システム。

との基本的なアイデア celery キューがあるということです(どちらか RabbitMQ また Redis)、労働者がPythonプロセスとして書かれ、 celeryd デーモン。セロリの文書によると、 celeryd ランニングをサポートします gevent モードも(ネットワークI/Oバウンドプロセスの場合)、おそらくこの環境で実行するには労働者コードが多くの変更を必要としないでしょう。

他のヒント

カスタムソケットIPCまたはZerOMQを使用することを検討します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top