芹菜工人没有消耗足够的任务

时间:2014-06-03 16:50:09

标签: python rabbitmq celery

我对Celery有一个奇怪的问题。

我使用RabbitMQ作为消息代理和结果后端。

任务通过pickle序列化,但它们只获取数据库中文件的id。 他们获取它,对它做一些工作并将结果写回数据库。 我只是将id存储在结果后端。

我使用一个组来提供任务,并且不会从中运行任何子任务。

我有一个并发度= 8(prefork)的工作者

如果我启动任务,则所有8个进程都在工作(100%cpu使用率)。

第一个任务完成后,奇怪的行为就开始了。 该过程不会开始新任务。 任务已初始化(我使用了CELERYD_MAX_TASKS_PER_CHILD = 1),但运行方法没有被调用。

所以问题是,并非所有流程都在持续运作。

尝试了许多配置设置,但没有改变此行为。

你有什么想法吗?

它不是数据库等。本地运行消息代理和数据库。 还看了一下有花的工人,它说大部分时间大约有4个过程都是活跃的。其他任务是保留的,但不要开始。

希望你能帮帮我!

1 个答案:

答案 0 :(得分:12)

终于明白了:

这只是我必须选择然后启动工人的选项。

使用-Ofair选项启动worker就可以了!

请参阅: http://docs.celeryproject.org/en/latest/userguide/optimizing.html#prefork-pool-prefetch-settings

感谢您的帮助:)