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