将任务发送给特定的芹菜工作者

问题描述 投票:0回答:2

我正在构建一个Web应用程序(使用Python / Django),该应用程序托管在连接到负载均衡器的两台计算机上。

我有一个中央存储服务器,并且每台主机上都有一个中央Redis服务器,一个celery beat和两个celery worker。

我从API端点(在任何主机上)接收文件,然后计划要复制到存储服务器的任务。

问题是使用以下命令安排任务:

task.delay(args)

然后任何工作人员都可以接收它,而接收到的文件仅存在于两台计算机中的一台上,并且必须从其中复制。

我尝试查找是否可以为工作人员分配唯一的ID,我可以将任务分配给该工人,但在文档中找不到任何帮助。

对此有任何解决方案?鉴于托管计算机的数量可以扩展到超过2。

python django redis celery celerybeat
2个回答
2
投票

最佳解决方案是将任务放入命名队列,并让每个工作人员从其特定队列中查找作业。因此,如果您拥有计算机A和计算机B,则可以拥有队列A,队列B和共享队列。机器A在队列A和共享队列上监视作业,而机器B在队列B和共享队列上寻找作业。


1
投票

最好的方法是让每个工作人员都有一个[[专用队列。

[当我学习芹菜时,我确实做到了这一点,并且在几年后完全放弃了这种方法,因为它产生了比实际解决的问题还要多的问题。

相反,我建议以下内容:您可能需要在任务之间共享的任何资源都应该位于共享文件系统(NFS)上,或者位于某种内存中缓存服务中,例如Redis,KeyDb或memcached。我们将S3和Redis结合使用,具体取决于资源的类型。

当然,如果您不太在意可伸缩性,那么按工队列方法将可以正常工作。

© www.soinside.com 2019 - 2024. All rights reserved.