芹菜工人不工作虽然 rabbitmq 有队列建立

celery worker not working though rabbitmq has queue buildup

我正在接触芹菜,我通过关注Tutorial写了一个任务,但不知何故工作人员没有起床,我得到了关注日志 输入命令后:

celery worker -A tasks -l debug

我得到一个日志:

Running a worker with superuser privileges when the
worker accepts messages serialized with pickle is a very bad idea!

If you really want to continue then you have to set the C_FORCE_ROOT
environment variable (but please think about this before you do).

User information: uid=0 euid=0 gid=0 egid=0

这是我的任务:

from celery import Celery

app = Celery('tasks', backend='amqp',broker='amqp://sanjay:**@localhost:5672//')

@app.task
def gen_prime(x):
    multiples = []
    results = []
    for i in xrange(2, x+1):
        if i not in multiples:
            results.append(i)
            for j in xrange(i*i, x+1, i):
                multiples.append(j)
    return results

虽然在 rabbitmq 管理控制台中,当我尝试在 ipython 控制台中生成质数时,我看到一些队列建立,但我没有在控制台上返回结果。

这是我的控制台操作:

>>> from tasks import gen_prime
>>> pr=gen_prime.delay(10000)
>>> pr.ready()
False
>>> 
>>> pr.ready()
False
>>> pr.ready()
False

我试图解决过去 3 天的这个问题,但我无法解决它。

错误消息几乎可以告诉您在这种情况下发生了什么。您正在尝试 运行 工作人员作为 root 用户(出于安全考虑,这通常是个坏主意)。如果你想覆盖它并允许它 运行,你必须设置你的环境:

export C_FORCE_ROOT="true"

然后运行工人。

或者您可以 运行 作为其他用户,这是首选。您可以搜索如何添加用户。然后您只需以该用户身份登录或 su 并执行您的工作程序。

既然你标记了这个数字海洋,这里有一个 link 到他们关于如何添加用户的教程:

https://www.digitalocean.com/community/tutorials/how-to-add-and-delete-users-on-ubuntu-12-04-and-centos-6

另外,celery 有一些关于如何守护你的工人的文档。我一般用supervisord的方式。

https://celery.readthedocs.org/en/latest/tutorials/daemonizing.html#centos

不要运行 celery worker 作为 root。

我建议使用 supervisord 来管理 celery workers - 您可以使用 user 配置指令来指定 运行 celery workers 作为哪个用户。