セロリと Django を使用して、X 秒ごとに実行したい Periodical_task を作成しています。
これは私が持っているものです..
@periodic_task(run_every=datetime.timedelta(seconds=2))
def initialize_new_jobs():
for obj in Queue.objects.filter(status__in=['I', 'Q']):
obj = Queue.objects.get(id=obj.id)
if obj.status not in ['I', 'Q']:
continue
obj.status = 'A'
obj.save()
create_other_task.delay(obj.id)
これはちょっとうまくいきますが、気分が悪いです。ループの開始時に obj を更新して、別の実行中の period_task が同じ Queue オブジェクトで create_other_task を発行していないことを確認する必要があります。
この種の仕事をするためのより良い方法はありますか?基本的に、できるだけ頻繁に create_other_task を実行したいのですが、ステータスが I または Q の Queue オブジェクトごとに 1 回だけです。
これは私の問題の短縮版なので、定期的なタスクを実行する代わりに、Queue オブジェクトを作成するときに create_other_task を実行できたという事実を無視してください :)