0

私たちのサーバーにはCPUがたくさんあり、リクエストハンドラーが並列処理を行う場合、一部のWebリクエストはより高速になる可能性があります.

例: N (約 1 ~ 20) 枚の写真に対して何らかの作業を行う必要があり、1 つの Web 要求を処理する必要があります。

リクエストが来る前にキャッシングしたり、何かをしたりすることはできません。

ハードウェアの複数の CPU を使用するためにできること:

  • スレッド: 好きじゃない
  • multiprocessing: すべてのリクエストで N 個のプロセスを開始する必要があります。新しいプロセスの開始とライブラリのインポートのために、多くの CPU サイクルが失われます。
  • 処理の準備ができている N プロセスを備えた特別な (手作りの) サービス
  • cellery (rabbitMQ): 通信オーバーヘッドがどのくらい大きいかわかりません...
  • 他の解決策は?

プラットフォーム: Django (Python)

4

2 に答える 2

3

2 番目と 3 番目の選択肢について: リクエストごとに新しいプロセスを開始する必要はありません。これがプロセス プールの目的です。アプリの起動時に新しいプロセスが作成されます。プールにリクエストを送信すると、ワーカーが使用可能になるまで自動的にキューに入れられます。欠点は、リクエストがブロックされることです。現時点でワーカーがいない場合、ユーザーは座って待機します。

于 2013-01-17T10:09:18.063 に答える
1

標準ライブラリ モジュールasyncoreを使用できます。

このモジュールは、非同期ソケット サービス クライアントおよびサーバーを作成するための基本的なインフラストラクチャを提供します。

基本的な HTML クライアントを作成する方法の例があります。


次に、 Twistedがあります。これは、非常に多くのことを行うことができます。これは、その HTTP クライアントを使用した例です。


Twisted は " HTTP を話します"が、asyncore は話せません。


その他のライブラリ:

于 2013-01-17T10:08:56.977 に答える