Python / Twistedマルチユーザーサーバー-より効率的なものは何ですか?
-
19-08-2019 - |
質問
Pythonで、サーバーのCPUを適切に拡張したい場合、明らかに複数のプロセスを生成する必要があります。 (Twistedを使用して)どちらが優れているのかと思いました:
A)マネージャープロセス(実際のソケット接続を保持するプロセス)は、受信したパケットを共有キュー(マルチプロセッシングモジュールからのパケット)に入れ、ワーカープロセスはパケットをキューから取り出して処理し、送信します結果をクライアントに返します。
B)マネージャープロセス(実際のソケット接続を保持するプロセス)は、遅延スレッドを起動し、プロセスプールでapply()関数を呼び出します。ワーカープロセスから結果が返されると、マネージャーは結果をクライアントに送り返します。
どちらの実装でも、ワーカープロセスはスレッドプールを使用するため、一度に複数のパケットを処理できます(多くのデータベースクエリがあるため)。
解決
Bには問題があると思います。スレッドは1つのCPUでのみ実行され、プロセスを実行しても、スレッドは引き続き実行されます。より良いかもしれません。
時間の観点から両方を試して測定し、どちらが高速で、どちらが適切にスケーリングするかを確認するのが最善です。ただし、Bが適切にスケーリングされることは非常に疑わしいことを繰り返します。
他のヒント
<!> quot; A <!> quot;あなたが望む答えですが、あなたは自分でそれをする必要はありません。
アンプルを検討しましたか?
所属していません StackOverflow