文章插图
delay 方法的 *args 和 **kwargs 就是函数的参数 , 它会传递给 apply_async 的 args 和 kwargs 。而其它的参数就是发送任务时所设置的一些参数 , 我们这里重点介绍一下 apply_async 的其它参数 。
-
countdown:倒计时 , 表示任务延迟多少秒之后再执行 , 参数为整型;
-
eta:任务的开始时间 , datetime 类型 , 如果指定了 countdown , 那么这个参数就不应该再指定;
-
expires:datetime 或者整型 , 如果到规定时间、或者未来的多少秒之内 , 任务还没有发送到队列被 worker 执行 , 那么该任务将被丢弃;
-
shadow:重新指定任务的名称 , 覆盖 app.py 创建任务时日志上所指定的名字;
-
retry:任务失败之后是否重试 , bool 类型;
-
retry_policy:重试所采用的策略 , 如果指定这个参数 , 那么 retry 必须要为 True 。参数类型是一个字典 , 里面参数如下:
-
-
max_retries : 最大重试次数 , 默认为 3 次;
-
interval_start : 重试等待的时间间隔秒数 , 默认为 0 , 表示直接重试不等待;
-
interval_step : 每次重试让重试间隔增加的秒数 , 可以是数字或浮点数 , 默认为 0.2;
-
interval_max : 重试间隔最大的秒数 , 即通过 interval_step 增大到多少秒之后, 就不在增加了, 可以是数字或者浮点数;
-
-
routing_key:自定义路由键 , 针对 RabbitMQ;
-
queue:指定发送到哪个队列 , 针对 RabbitMQ;
-
exchange:指定发送到哪个交换机 , 针对 RabbitMQ;
-
priority:任务队列的优先级 , 0-9 之间 , 对于 RabbitMQ 而言 , 0是最高级;
-
serializer:任务序列化方法 , 通常不设置;
-
compression:压缩方案 , 通常有zlib、bzip2;
-
headers:为任务添加额外的消息头;
-
link:任务成功执行后的回调方法 , 是一个signature对象 , 可以用作关联任务;
-
link_error: 任务失败后的回调方法 , 是一个signature对象;
我们随便挑几个举例说明:
>>> from app import add
# 使用 apply_async , 要注意参数的传递
# 位置参数使用元组或者列表 , 关键字参数使用字典
# 因为是args和kwargs, 不是 *args和 **kwargs
>>> add.apply_async([3], {"y": 4},
... task_id="恋恋",
... countdown=5).get()
7
>>>
查看一下 worker 的输出:
文章插图
注意左边的时间 , 16:25:16 收到的消息 , 但 5 秒后才执行完毕 , 因为我们将 countdown 参数设置为 5 。并且任务的 id 也被我们修改了 。
另外还需要注意一下那些接收时间的参数 , 比如 eta 。如果我们手动指定了eta , 那么一定要注意时区的问题 , 要保证 celery 所使用的时区和你传递的 datetime 的时区是统一的 。
其它的参数可以自己手动测试一下 , 这里不细说了 , 根据自身的业务选择合适的参数即可 。
推荐阅读
- 龙之家族|《龙之家族》这1细节,暗示了丹妮莉丝,才是最伟大的坦格利安?
- 小米|37岁财富自由!雷军接受央视采访:我要成伟大的人 小米要影响世界、造车是被逼的
- 中国最大的岛屿是日本岛 中国最大的岛屿是什么岛-张雪峰
- 盛明兰|重温《知否》,王老太师一生最大的败笔,就是娶了偏心的王老太太
- 韩剧|《当你沉睡时》:当噩梦照进现实,救赎和信任才是最强的陪伴
- 赵鹏翔|“李易峰”事件最大的受益者是谁?
- 罚罪|《罚罪》:大王现身,是全剧最大的反转吗,网友:不是的
- |能力,让一个人迅速脱颖而出,如何发挥出你的最强技能?
- 华为|喷问界M7不好看的人品位比较Low!余承东:华为做伟大的设计
- 最大的恐龙有多大 最大的恐龙排行榜前十名