私は最近、ソケットサーバーを実装するために使用できるいくつかの戦略をリストしたthis documentを読んでいました。つまり、彼らは以下のとおりです。Pythonでソケットベースのサーバーを作成することをお勧めしますか?
- は、各スレッドで多くのクライアントにサービスを提供し、各スレッドで多くのクライアントにサービスを提供し、ノンブロッキングI/Oと準備変更通知を使用するノンブロッキングI/Oとレベルトリガの準備通知
- を使用します
- カーネル
CPythonので使用するヒントをにしていただき、ありがとうと思います。ここにはいくつかの点や悪い点があります。私は主に高い並行性の下でパフォーマンスに関心があり、現在の実装の数が遅すぎます。
私は簡単なものから始めることができますが、「5」が出ています。カーネルに何かをハッキングするつもりはないからです。
"4" GILのために外出する必要があるようにも見えます。もちろん、スレッドの代わりにマルチプロセッシングを使うこともできます。 IOのブロックには、理解しやすいという利点もあります。
「1」の伝統的な選択または自明マルチプロセッシングと組み合わせることができるの世論調査です:
そして、ここに私の知識が少し衰退します。
「2」の準備変更通知、新しいファイルディスクリプタによって使用され、kqueueのある
「3」私はPythonのラッパーを持っている。このため、カーネルの実装があることを確認していません。
だから、PythonにはTwistedのような素晴らしいツールのバッグがあります。私はTwistedをベンチマークしていますが、マルチプロセッサマシンでは遅すぎると感じましたが、それらはもっと良いアプローチです。多分ロードバランサで4つのねじれがあるかもしれませんが、わかりません。アドバイスをいただければ幸いです。マルチプロセッサ(マルチコア)マシンとして
と言っています。epollは2.6以降ではstdlib、2.5ではeasy_installableと考えています。パッケージはselect-somethingと呼ばれます。曖昧さを残して申し訳ありません。 –
Twistedはepollを使うこともできます。実際、Twistedは、サポートされているすべてのイベント通知APIを、それが提供する統一されたAPIに変えます。したがって、プラットフォームが実行できるベストがselectである場合、アプリはselectを使用します。 epollがある場合、あなたのアプリはepollを使用します。すべてあなたに透過的に。 –
「asyncore」と書かれています – new123456