21

これが私のシナリオです:

ユーザーが私の Web サイトにログインすると、特定のユーザーの一連のタスクをキューに入れます (通常、各タスクには数百ミリ秒かかり、ユーザーごとに数百のタスクがあります)。これらのタスクはデフォルトの Celery キューに入れられ、何百ものワーカーが実行されています。バックエンドでタスクが完了すると、websockets を使用してユーザーのリアルタイムの進行状況を表示します。アクティブなユーザーが 1 人か 2 人しかいない場合、生活は良好です。

ここで、少数の同時ユーザーがサイトにログインすると、後者のユーザーは最初のユーザーの後ろにキューに入れられ、それらのユーザーのタスクは枯渇します (すべてのタスクが同じキューに送られるため)。私の考えは、公平性を確保するためにユーザーごとに動的キューを作成することです。ただし、Celery のドキュメント ( http://docs.celeryproject.org/en/latest/userguide/routing.html#defining-queues ) によると、キューを静的に定義する必要があるようです。

私のシナリオでセロリを使用するためのベスト プラクティスに関する提案はありますか?

4

2 に答える 2

5

http://docs.celeryproject.org/en/latest/userguide/workers.html#queues

celery -A proj control add_consumer foo -d worker1.local

app.control.add_consumer() メソッドを使用して、同じことを動的に行うことができます。

app.control.add_consumer('foo', reply=True)
[{u'worker1.local': {u'ok': u"already consuming from u'foo'"}}]

app.control.add_consumer('foo', reply=True,
destination=['worker1@example.com'])
于 2015-03-27T20:48:54.410 に答える
2

実行時にタスクをキューに動的に割り当てることができます。有効にしている場合、これは機能しますCELERY_CREATE_MISSING_QUEUES

于 2013-09-12T07:51:39.480 に答える