前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Django 2.1.7 Celery 4.3.0 调用任务(Calling Task)

Django 2.1.7 Celery 4.3.0 调用任务(Calling Task)

作者头像
Devops海洋的渔夫
发布2019-08-06 17:39:31
5120
发布2019-08-06 17:39:31
举报
文章被收录于专栏:Devops专栏Devops专栏

delay()

在前面的篇章中调用任务,可使用delay()方法:

代码语言:javascript
复制
In [1]: from celery_tasks.tasks import my_task1,my_task2,my_task3,my_task4

# 无传递参数的调用任务
In [2]: my_task1.delay()
Out[2]: <AsyncResult: 20d3ee91-d101-477a-9326-6dba394d8bda>

# 传递参数调用任务
In [2]: my_task4.delay(10,20)
Out[2]: <AsyncResult: 1d4fbd26-9fb1-4697-a0b1-9ba2d773596d>

apply_async()

也可以使用apply_async()方法,该方法可让我们设置一些任务执行的参数,例如,任务多久之后才执行,任务被发送到那个队列中等等.

查看一下当前celery的队列名称,如下:

代码语言:javascript
复制
In [9]: ret = my_task4.apply_async((2, 2))

In [10]: ret.result
Out[10]: 4

In [11]: ret.failed()
Out[11]: False

# 发送执行my_task4任务,参数为(2,2), 发送至celery队列,再10秒后开始执行
In [15]: ret = my_task4.apply_async((2, 2), queue='celery', countdown=10)

# 在10秒内查看结果,无结果显示,说明任务还未执行
In [16]: ret.result

In [17]: 

# 在10秒后查看结果,有结果显示,说明任务已执行
In [17]: ret.result
Out[17]: 4

In [18]: ret.failed()
Out[18]: False

# 查看任务ID
In [19]: ret.task_id
Out[19]: '63c6e411-a8cd-4ccd-a9a9-7f6a23fb4f95'

任务my_task4将会被发送到celery队列中,并且在发送10秒之后执行。

如果我们直接执行任务函数,将会直接执行此函数在当前进程中,并不会向broker发送任何消息。

无论是delay()还是apply_async()方式都会返回AsyncResult对象,方便跟踪任务执行状态,但需要我们配置result_backend.

每一个被调用的任务都会被分配一个ID,我们叫Task ID.

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019.08.03 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • delay()
  • apply_async()
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档