【问题标题】:Fetching tasks from many queues从多个队列中获取任务
【发布时间】:2012-03-14 11:52:34
【问题描述】:

我有两种类型的任务,一种是用户生成的,另一种是大批量创建的。任务将分开队列(“短”和“长”) 当一个队列中有任务(即大批量)时,Celery 只获取那些任务,完全忽略另一个队列,直到整个批次完成。

Example:
send 100 slow tasks to "long" queue
send 100 small tasks to "short" queue
send 100 slow tasks to "long" queue
send 100 small tasks to "short" queue

Celery behaviour:
process 100 tasks form "long" queue
process 100 tasks form "short" queue 
process 100 tasks form "long" queue 
process 100 tasks form "short" queue

即使我为慢速任务设置 rate_limit 也会发生这种情况,这会进入“长”队列。我得到的只是缓慢的任务阻塞系统的时间更长:/ 有没有办法确保 Celery 从所有队列中获取任务? (我正在使用带有 RabbitMQ 的 Celery 2.5.1)

【问题讨论】:

  • 这可能是使用默认交换引起的(两者相同)?

标签: rabbitmq celery


【解决方案1】:

您可以为每个队列启动单独的 celery worker:

$ celeryd -Q 短

$ celeryd -Q 长

在这种情况下,每种类型的任务将由单独的工作人员独立处理。

【讨论】:

  • 这是我暂时的解决方案。我以相当笼统的方式提出了问题。因为我至少有 3 个队列,而且只会随着时间的推移而增加。为什么 celery 无法处理任务后(由于速率限制),停止寻找它可以处理的任务(即在其他队列中)?
  • 谢谢你 0x00mh,这看起来是目前唯一合理的解决方案。如果我能找到更好的问题,我会更新问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多