celery
アプリケーションで定期的なタスクを実行するために使用します。以下の簡単な例を見てみましょう
from myqueue import Queue
@perodic_task(run_every=timedelta(minutes=1))
def process_queue():
queue = Queue()
uid, questions = queue.pop()
if uid is None:
return
job = group(do_stuff(q) for q in questions)
job.apply_async()
def do_stuff(question):
try:
...
except:
...
raise
上記の例でわかるように、非同期タスクを実行するために使用しますが、(キューであるため)例外が発生した場合やその他の場合celery
に実行する必要があります。この状況では、 と の両方の場合にタスクからのコールバックがあると非常に明確で便利です。queue.fail(uid)
do_stuff
queue.ack(uid)
on_failure
on_success
いくつかのドキュメントを見ましたが、でコールバックを使用する方法は見たことがありませんapply_async
。それは可能ですか?