当前,我们计划建立一项服务,以验证电子邮件地址。
这需要我们与各种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
以使其符合我的期望?或者,我应该使用其他工具。或者,我应该重新设计工作队列系统的工作方式?