有时候执行celery是,可能希望在后台运行的任务成功执行或失败时获得通知。还可能希望在每次celery任务运行之前或完成之后运行一个函数。在这些情况下以及其他许多类似的情况下,信号都会派上用场。
signals:
celery提供了很多信号,接下来我将从四个简单的信号进行演示。
- task_prerun:在任务执行之前分派。Sender是正在执行的任务对象。
- task_postrun:在任务执行后分派。
- task_success:当任务成功时分派。
- task_failure:当任务失败时分派。
简单项目目录:
celery.py
from celery import Celery
app = Celery('proj',
broker='redis://192.168.124.49:6379/0',
backend='redis://192.168.124.49:6379/0',
include=['celery_proj.tasks'])
tasks.py
from celery_proj.celery import app
from celery.signals import task_prerun, task_postrun, task_success, task_failure
@app.task
def add(x, y):
return x + y
@task_prerun.connect(sender=add)
def task_prerun_notifier(sender=None, **kwargs):
print("From task_prerun_notifier ==> Running just before add() executes")
@task_postrun.connect(sender=add)
def task_postrun_notifier(sender=None, **kwargs):
print("From task_postrun_notifier ==> Ok, done!")
@task_success.connect(sender=add)
def task_sucess_notifier(sender=None, **kwargs):
print("From task_success_notifier ==> Task run successfully!")
@task_failure.connect(sender=add)
def task_failure_notifier(sender=None, **kwargs):
print("From task_failure_notifier ==> Task failed successfully!")
启动celery:
celery -A celery_proj worker -l info -P eventlet
执行生产者1:
from celery_proj.tasks import add
ret = add.delay(3, 5)
print(ret)
执行生产者2:
from celery_proj.tasks import add
ret = add.delay(3, '5')
print(ret)
参考博文:
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/142823.html