18

処理のためにタスクをキューに入れる小さなスクリプトがあります。このスクリプトは、キューに入れる必要のあるアイテムを取得するために、大量のデータベース クエリを作成します。私が直面している問題は、スクリプトによってエンキューされるとすぐに、セロリ ワーカーがタスクを取得し始めることです。これは正しく、セロリが機能するはずの方法ですが、これにより、スクリプトとセロリ ワーカーの間でデッドロックが発生することがよくあります。

スクリプトからすべてのタスクをキューに入れ、スクリプトが完了するまで、または一定の遅延時間まで実行を遅らせる方法はありますか?

celery または django-celery のドキュメントでこれを見つけることができませんでした。これは可能ですか?

現在、クイックフィックスとして、処理するすべてのアイテムをリストに追加することを考えていました。スクリプトがすべてのクエリの実行を完了したら、リストを反復処理してタスクをキューに入れるだけです。これで問題が解決するかもしれませんが、何千ものアイテムをキューに入れる場合、これは悪い考えかもしれません。

4

3 に答える 3

23

eta/countdown オプションを使用すると、タスクの実行を遅らせることができます。

http://docs.celeryproject.org/en/master/userguide/calling.html#eta-and-countdown

于 2012-10-22T17:58:29.730 に答える
2

タスクの実行を遅らせる方法を求めているのではなく、独自のスクリプトの競合状態を回避しようとしていると思います。

次に、タスクを作成し、そのタスクで、.apply_async() または .delay() ではなく、.apply() を使用して各タスクを呼び出します。これらのタスクが順番に実行されるように

于 2016-04-22T07:45:22.793 に答える