这个问题涉及在不同的机器上使用多个远程芹菜工作者。 App的实现可以概念化为:
我的应用程序(生产者)将每隔5分钟向队列中添加多个任务(比方说50个)(想象一个python 用于循环迭代在每5分钟异步执行的任务列表上间隔)。我希望芹菜工人(这将是远程机器)在推动它们后立即选择这些任务。
我的问题是Celery / RabbitMQ会自动处理任务分配(因此没有工作人员从队列中获取已由工作人员接收的任务 - 即确保工作不重复)并分配任务均匀,所以当其他工人努力工作或者必须在设置中配置/编程时,没有工人会懒散吗?*
如果有人能转发相关文档,我将不胜感激(我正在查看Celery文档,但在这种情况下无法找到有关远程芹菜工人的具体信息。)
答案 0 :(得分:3)
自动但你需要知道这里描述的预取功能:http://docs.celeryproject.org/en/latest/userguide/optimizing.html#prefetch-limits,读到页面结尾。
简而言之,预取工作分为两个级别:工作级别和进程级别,因为工作者可能有多个进程。要在工作人员级别禁用预取,您需要在celery设置中指定worker_prefetch_multiplier = 1
,以在进程级别禁用在工作程序命令行中指定-Ofair
选项。
答案 1 :(得分:0)
因此,在挖掘RabbitMQ文档之后,似乎默认的交换方法是Direct Exchange(ref https://www.rabbitmq.com/tutorials/amqp-concepts.html),这意味着任务将以循环方式分发给工作人员。