我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
Run Code Online (Sandbox Code Playgroud)
正如您在上面的示例中所看到的,我celery用来运行异步任务,但是(因为它是一个队列)我需要queue.fail(uid)在异常do_stuff或queue.ack(uid)其他情况下执行.在这种情况下,在两种情况下从我的任务中获得一些回调是非常明确和有用的 - on_failure和on_success.
我看到了一些文档,但从未见过使用回调的做法apply_async.有可能吗?
小智 38
对Task类进行子类化并重载on_success和on_failure函数:
class CallbackTask(Task):
def on_success(self, retval, task_id, args, kwargs):
pass
def on_failure(self, exc, task_id, args, kwargs, einfo):
pass
@celery.task(base=CallbackTask) # this does the trick
def add(x, y):
return x + y
Run Code Online (Sandbox Code Playgroud)
小智 6
调用apply_async时,可以通过link和link_err kwargs指定成功和错误回调.芹菜文档包含一个明确的例子:http://docs.celeryproject.org/en/latest/userguide/calling.html#linking-callbacks-errbacks
| 归档时间: |
|
| 查看次数: |
22299 次 |
| 最近记录: |