1

我是 celery 的新手,可能做错了什么,但我已经花了很多时间试图弄清楚如何正确配置 celery。

因此,在我的环境中,我有 2 台远程服务器;一个是主要的(它有公共 IP 地址和数据库服务器、rabbitmq 服务器和运行我的 Web 应用程序的 Web 服务器等大部分东西都在那里),另一个用于我想使用 celery 从主服务器异步调用的特定任务。

我打算使用 RabbitMQ 作为代理和结果后端。Celery 配置非常基本:

CELERY_IMPORTS = ("main.tasks", ) 
BROKER_HOST = "Public IP of my main server" 
BROKER_PORT = 5672 
BROKER_USER = "guest" 
BROKER_PASSWORD = "guest" 
BROKER_VHOST = "/" 
CELERY_RESULT_BACKEND = "amqp" 

当我在主服务器上运行一个worker时,任务执行得很好,但是当我在远程服务器上运行它时,只执行了几个任务,然后worker卡住了,无法执行任何任务。当我重新启动工作人员时,它会执行更多任务并再次卡住。任务内部没有什么特别之处,我什至尝试了一个只添加 2 个数字的测试任务。我尝试以不同的方式运行worker(妖魔化而不是妖魔化,设置不同的并发性并使用celeryd_multi),没有任何帮助。

可能是什么原因?我错过了什么?除了代理(RabbitMQ)之外,我是否必须在主服务器上运行某些东西?或者它是芹菜中的一个错误(我尝试了几个版本:2.2.4、2.3.3 和 dev,但都没有工作)?

嗯...我刚刚在本地工作人员上重现了同样的问题,所以我真的不知道它是什么......是否需要在每执行 N 个任务后重新启动 celery 工作人员?

任何帮助将不胜感激:)

4

2 回答 2

1

不知道你是否最终解决了问题,但我有类似的症状。结果发现(无论出于何种原因)任务中的打印语句导致任务无法完成(可能是某种死锁情况?)。只有部分任务有打印语句,所以当这些任务最终执行时,worker 数量(由并发选项设置)全部耗尽,导致任务停止执行。

于 2012-08-11T07:13:10.323 回答
0

尝试将您的芹菜配置设置为

CELERYD_PREFETCH_MULTIPLIER = 1
CELERYD_MAX_TASKS_PER_CHILD = 1

文档

于 2019-02-12T11:02:49.963 回答