2012-10-22 25 views
10

処理のためにタスクをエンキューする小さなスクリプトがあります。このスクリプトは、エンキューする必要のあるアイテムを取得するためのデータベースクエリをたくさん作成します。私が直面している問題は、スクリプトによってエンキューされるとすぐに、セルリーワーカーがタスクを開始することです。これは正しく、セロリが動作する方法ですが、これはしばしばスクリプトとセロリの労働者の間のデッドロックにつながります。Celeryタスクの実行を延期する方法を教えてください。

スクリプトからすべてのタスクをエンキューできますが、スクリプトが完了するまで、または一定の時間が経過するまで実行を延期する方法はありますか?

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

現在、クイックフィックスとして、処理されるすべてのアイテムをリストに追加することを考えました。スクリプトがすべてのクエリの実行を完了したら、リストを繰り返してタスクをエンキューすることができます。おそらくこれで問題は解決しますが、何千ものアイテムをエンキューすると、これは悪い考えかもしれません。

答えて

1

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

次にタスクを作成し、そのタスクで.apply()、.apply_async()、.delay()を使用せずにそれぞれのタスクを呼び出します。これらのタスクは順次実行されるように

関連する問題