celery的坑之任务分级

celery链式分发任务:

task1.si(**kwargs)|task2.si(**kwargs)|last.si(**kwargs)

即按task1, task2, last的顺序分发任务

当执行为单个任务时,任务会很顺畅执行。

但时,当程序分布式高并发执行时,会发生任务虽然都丢进了队列中,但是执行优先级无法控制。

比如上一个任务的last丢进队列后,后面的新开始的task任务也被丢进同一队列,而程序无法优先执行last任务,导致前一个并发任务永远阻塞在last任务,无法结束。

对于需求高相应度的系统,这种方法显然是行不通的。

对于此类情况,我们可以给出两种解决方案:

1.直接将task1 task2 last绑定为同步任务,再丢进队列中

由于task可以将last任务挤到后面,显然任务并发负载已达到上限,当任务链不多时(比如此时的3个任务组成任务链),可以应用这种办法,而不会损耗太多的资源。

 

2.将平行的task1,task2丢到一个主队列,将last丢进另外的队列,互不干扰。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值