0

私はこれに対してさまざまなアプローチを試してきましたが、Python でこの問題を解決するための最良のアプローチは何かを皆さんが考えていることを確認したいと思います。

基本的に、単一のクエリ用語が提供されたリクエストを受け入れ、その用語と並行して一連の計算を実行する Web サービスがあります。これらの計算は、個々の関数呼び出しと考えることができます。

リクエストが来るとすぐに関数を非同期で呼び出し、結果が少しずつ出てくるまでリクエストを保持するという考え方です。

私の調査によると、 geventのようなライブラリを使用するのがおそらく最善の方法のようですが、私はまだ greenlet に完全に慣れていません。また、私が探しているタイプの機能を達成するために (結果が利用可能になったときに長いリクエストを介してクライアントに送り返されるようにするため)、これをサポートする特別なタイプの StreamServer を使用する必要があるようです。応答自体は、フロントエンドの JavaScript モジュールによって読み取られる単なる JSON オブジェクトであり、ブラウザに送り返されると UI コンポーネントが更新されます。

これを行うための最良のアプローチは何ですか?gevent のようなものを使用することは理にかなっていますか、それともライブラリの支援なしにコルーチンを使用して実装する必要がありますか? これは、過去に多くの人がここで行ってきたことだと思います。いくつかの推奨事項を集めたいと思います。

詳細をご希望の場合はお知らせください。ご提案をお待ちしております。

4

1 に答える 1

0

あなたが話している「計算」がCPUにバインドされていないと仮定すると、geventそのようなことには素晴らしいでしょう。リクエスト ハンドラは次のようになります。

def handle_request(request):
    ...
    pool = gevent.pool.Group()
    results = group.map(do_computation, input_data)
    return results

ただし、それらが CPU バウンドの場合は、を考慮する必要がありますmultiprocessing。単一のオペレーティング システム プロセスでの CPU バウンド タスクに関しては、Python は一般的にかなり貧弱です。

于 2012-06-12T06:53:32.787 に答える