多个Celery远程工作者

3
这个问题涉及在不同的机器上使用多个远程Celery工作者。应用程序的实现可以概括为:

enter image description here

我的应用程序(生产者)将每5分钟向队列添加多个任务(比如50个)(想象一下Python的for循环迭代要异步执行的任务列表,每隔5分钟执行一次)。我希望Celery工作者(将是远程机器)在任务被推送时立即接受这些任务。
我的问题是,Celery / RabbitMQ是否会自动处理任务分配(以确保没有工作者选择已经被队列中的工作者选择的任务 - 即确保不会重复工作),并平均分配任务,以便没有工作者闲置而其他工作者努力工作,还是必须在设置中进行配置/编程?
如果有人能向我提供相关文档,我将不胜感激(我正在查看Celery文档,但在此上下文中找不到有关远程Celery工作者的特定信息)。
2个回答

3
自动化但是你需要注意预取功能,这在这里有描述:http://docs.celeryproject.org/en/latest/userguide/optimizing.html#prefetch-limits,请阅读页面至末尾。简言之,预取工作在两个层面上:工作层和进程层,因为一个工作者可能有多个进程。要在工作者层禁用预取,您需要在celery设置中指定worker_prefetch_multiplier = 1,要在进程级别上禁用预取,您需要在工作者的命令行中指定-Ofair选项。

非常感谢,我会查看文档的!您能否也请将我引导至Celery文档,其中指定和/或详细说明任务分配为自动的部分,谢谢! - Jahed Uddin
另外,由于异步任务只是一系列相同的HTTP REST调用(每个任务都指向不同的设备),使用Eventlet实现并发是否有意义:http://celery.readthedocs.io/en/latest/userguide/concurrency/eventlet.html#concurrency-with-eventlet - Jahed Uddin
找不到任何关于自动性质的具体位置。路由可能是你需要的:http://celery.readthedocs.io/en/latest/userguide/routing.html。同时,我从未使用过Eventlet,无法发表任何意见。 - Aleksandr Borisov

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接