我对Celery有一个奇怪的问题。
我使用RabbitMQ作为消息代理和结果后端。
任务通过pickle序列化,但它们只获取数据库中文件的id。 他们获取它,对它做一些工作并将结果写回数据库。 我只是将id存储在结果后端。
我使用一个组来提供任务,并且不会从中运行任何子任务。
我有一个并发度= 8(prefork)的工作者
如果我启动任务,则所有8个进程都在工作(100%cpu使用率)。
第一个任务完成后,奇怪的行为就开始了。 该过程不会开始新任务。 任务已初始化(我使用了CELERYD_MAX_TASKS_PER_CHILD = 1),但运行方法没有被调用。
所以问题是,并非所有流程都在持续运作。
尝试了许多配置设置,但没有改变此行为。
你有什么想法吗?
它不是数据库等。本地运行消息代理和数据库。 还看了一下有花的工人,它说大部分时间大约有4个过程都是活跃的。其他任务是保留的,但不要开始。
希望你能帮帮我!
答案 0 :(得分:12)
终于明白了:
这只是我必须选择然后启动工人的选项。
使用-Ofair选项启动worker就可以了!
请参阅: http://docs.celeryproject.org/en/latest/userguide/optimizing.html#prefork-pool-prefetch-settings
感谢您的帮助:)