如何正确配置和运行远程芹菜工人?

时间:2011-11-01 12:54:31

标签: rabbitmq celery amqp django-celery celeryd

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

所以,在我的环境中我有2个远程服务器;一个是主要的(它有 公共IP地址和大多数数据库服务器,rabbitmq等东西 运行我的Web应用程序的服务器和Web服务器就在那里)和另一个 用于我想要异步调用的特定任务 使用芹菜的主服务器。

我打算将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时,任务就被执行了 很好,但是当我在远程服务器上运行它时只有几个任务 执行然后工人卡住不能执行任何 任务。当我重新启动工作程序时,它会执行更多任务并获取 卡住了。任务中没有什么特别的东西,我甚至尝试过 一个只添加2个数字的测试任务。我试图管理工人 不同(妖魔化而不是,设置不同的并发和 使用celeryd_multi),没有什么真正帮助。

可能是什么原因?我错过了什么?我必须跑步吗? 除了经纪人(RabbitMQ)之外的主服务器上的东西?或者是 它是芹菜中的一个错误(我尝试了几个版本:2.2.4,2.3.3和dev, 但他们都没有工作)?

嗯......我刚刚在当地工人身上复制了同样的问题,所以我 真的不知道它是什么......是否需要重新启动芹菜 每N个任务执行后的工人?

非常感谢任何帮助:)

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:0)

尝试将您的celery配置设置为

nt num=10;//any number you want
nt last=num%10;
        switch(last)
         {
                 case 0:
                 case 2:
                 case 4:
                 case 6:
                 case 8:
                System.out.println("numbet is even" +num) ;
                   break ;
                   default :
                System.out.println("number is odd" +num)
           } 
             //end of switch block
            //odd or even using fall through language java
            //GAGAN GANJWAR

docs