是否可以使Celery worker在继续下一个队列之前完成当前队列中的所有任务?

时间:2018-07-12 07:32:02

标签: python celery

当前,我们计划建立一项服务,以验证电子邮件地址。

这需要我们与各种SMTP服务器通信。

这是我们将要实时接收的数据。

New request coming in real-time
===============================
user0@server0.com
user4@server1.com
user2@server0.com

user3@server1.com
user1@server0.com
user7@server2.com

user6@server2.com
user5@server1.com
user8@server2.com
...
...
[New user @ new server request will come in real-time dynamically]

从工作人员的角度来看,与SMTP服务器建立第一个连接是“昂贵的”。

我们希望工作人员完成对所有user的扫描,以检查是否已连接server,然后继续扫描下一个user中的所有server

我们计划通过以下方式将数据放入Celery中。

queue named "server0.com"
=========================
user0, user1, user2, ...


queue named "server1.com"
=========================
user3, user4, user5, ...


queue named "server2.com"
=========================
user6, user7, user8, ...

[New queue will be created dynamically, by using server name]

假设我们只有1个工人。我们希望那个特定的工作人员首先依次在server0队列中拾取所有项目,然后仅继续移至server1队列。

在这之间,如果在server0队列中插入了新项目,则工作程序仍将继续进行到server2队列。之后,它将再次返回以从server0队列中提取物品。

有什么办法可以达到这样的目的?

我看着How does a Celery worker consuming from multiple queues decide which to consume from first?,似乎默认行为是,芹菜工人将在接下来的回合方式中拾取物品

"user0" in "server0" queue
"user3" in "server1" queue
"user6" in "server2" queue
"user1" in "server0" queue
...

是否可以配置Celery以使其符合我的期望?或者,我应该使用其他工具。或者,我应该重新设计工作队列系统的工作方式?

0 个答案:

没有答案