7

結果が大きいCeleryで実行されたタスクを処理する最良の方法は何ですか? 数百メガバイトのデータを返すテーブル ダンプなどを考えています。

メッセージを結果データベースに詰め込むという素朴なアプローチは、ここでは役立たず、結果のバックエンドに AMQP を使用する場合はなおさらだと思います。ただし、遅延が問題になるこれらのいくつかがあります。エクスポートの特定のインスタンスによっては、返されるまでブロックして、タスク クライアントからエクスポート データを直接送信する必要がある場合があります (エクスポート コンテンツに対する HTTP 要求が着信しましたが、存在しません、その要求への応答 ... 時間がかかっても)

では、このためのタスクを作成する最良の方法は何ですか?

4

2 に答える 2

5

1 つのオプションは、すべてのワーカー マシンで静的 HTTP サーバーを実行することです。その後、タスクは大きな結果を静的ルートの一意のファイルにダンプし、そのファイルへの URL 参照を返すことができます。その後、レシーバーは余暇に結果を取得できます。

例えば。このような漠然としたもの:

@task
def dump_db(db):
  # Some code to dump the DB to /srv/http/static/db.sql
  return 'http://%s/%s.sql' % (socket.gethostname(), db)

もちろん、古いファイルを取得したり、一意性を保証したり、おそらく他の問題を解決したりする何らかの手段が必要になりますが、一般的な考え方は理解できます。

于 2010-11-22T11:30:33.713 に答える