0

シナリオは、RMDB ID をパラメーターとして使用して API 要求の応答を保存することです。imdv-id tt0000001 から tt9999999 までのすべての映画情報を取得したいと考えています。

現在、gevent を使用して複数のスレッド (gevent.joinall(threads)) を実行していますが、それほど高速ではありません。Celery+RabbitMQ を使用するなど、この種の問題に対する他の解決策はありますか?

4

1 に答える 1

0

1 つには、コード内でブロッキング呼び出しを行っていないことを確認する必要があります。これは、他のすべての実行もブロックし、システム全体の速度を低下させるためです。ブロックの理由には、イベントレットのモンキー パッチ (C 拡張など) によってパッチが適用されていないタイトなループまたは IO が含まれます。

Celery は eventlet と gevent の使用をサポートしています。これはおそらく、実行中の同時実行オプションとして推奨されます (Web 要求 IO)。Celery を使用してもコードの実行速度は速くならないかもしれませんが、多くのマシンに作業を簡単に分散できます。

最適化するには、常にコードをプロファイリングして、ボトルネックが何であるかを調べる必要があります。ネットワークが遅い、ホストが遅い、DNS が遅いなど、さまざまな原因が考えられます。

于 2012-09-14T13:22:57.787 に答える