我正在接触芹菜,我按照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天内解决这个问题,但我无法解决这个问题。
答案 0 :(得分:4)
错误消息几乎告诉您在这种情况下发生了什么。你试图以root身份运行worker(由于安全问题,这通常是个坏主意)。如果要覆盖它并允许它运行,则必须设置环境:
export C_FORCE_ROOT="true"
然后运行工人。
或者您可以将其作为其他用户运行,这是首选。您可以搜索如何添加用户。然后,您只需以该用户或su身份登录并执行您的工作人员。
自从您标记了这个数字海洋以来,这里有一个指向如何添加用户的教程的链接:
此外,芹菜有一些关于如何守护你的工人的文件。我通常使用supervisord方法。
https://celery.readthedocs.org/en/latest/tutorials/daemonizing.html#centos
答案 1 :(得分:2)
不要以root身份运行芹菜工人。
我建议使用supervisord来管理芹菜工作者 - 您可以使用user
配置指令指定运行芹菜工作者的用户。