我在我的应用中使用
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
来运行异步任务,但(由于它是一个队列),在do_stuff
发生异常时需要执行queue.fail(uid)
,否则需要执行queue.ack(uid)
。在这种情况下,在任务成功和失败的情况下都有一些回调将非常清晰和有用。文档中提到了一些内容,但从未见过使用apply_async
进行回调的实践。这可行吗?