我正试图获得芹菜的官方教程,但一直收到这个错误:
D: \test>celele-任务工作者-loglevel=info
;----------------celery@BLR122Sv3.0.17(Chiastic Slide(
----***-----
---***--【配置】
--*-****---。经纪人:amqp://guest@localhost:5672//
-**--------。app:任务:0x2a76850
-**--------。并发:2(进程(
-**--------。events:OFF(启用-E以监视此工作进程(
-**---------------
-*---*---[队列]
--*******----。芹菜:交换:芹菜(直接(绑定:芹菜
---*****-----
[任务]
;。任务。添加
〔2013-03-29 17:50:52533:警告/主进程〕celery@BLR122S准备好了
〔2013-03-29 17:50:52568:INFO/MainProcess〕消费者:已连接amqp://guest@127.0.0.1:5672//.
〔2013-03-29 17:51:32496:INFO/MainProcess〕从broker获取任务:tasks.add〔83459233-ce4-40ed-a2a8-ee0d60768006]
〔2013-03-29 17:51:32562:错误/MainProcess〕任务任务。添加〔83459233-ce54-40ed-a2a8-ee0d60768006]引发异常:类型为"tasks.add"的任务未注册,请确认它是进口的
追溯(最近一次通话(:worker 中的文件"C:\Python27\lib\site-packages\billing\pool.py",第293行
result=(True,func(*args,**kwds((
文件"C:\Python27\lib\site-packages\celeb\task\trace.py",第320行,在_fast_trace_task中
return tasks[task]__;trace__;(uuid,args,kwargs,request([0]
文件"C:\Python27\lib\site-packages\celeb\app\registry.py",第20行,位于__;缺少__
提升自我。NotRegistered(密钥(
NotRegistered:'tasks.add'
我安装了芹菜==3.0.17和拉比tMQ
然后用"D:test>celery -A tasks worker --loglevel=info
"启动芹菜tasks.add
似乎在[Tasks]中,但调用方:
>>> from tasks import add
>>> add.delay(1,1)
# Out: AsyncResult: 83459233-ce54-40ed-a2a8-ee0d60768006
得到了上面的失败。有人有同样的问题吗?
编辑:这是我的任务。从教程中复制。
from celery import Celery
celery = Celery('tasks', broker='amqp://guest@localhost//')
@celery.task
def add(x, y):
return x + y
首先尝试导入任务,我建议您在交互式python环境中实现您的工作,如python IDE,然后执行以下操作:
- 导入任务
在编写tasks.add
之前
以下内容将解决您的问题
from tasks import add
res = add.delay(1,2) #call to add
res.get() #get result
使用更改后重新启动您的工作人员
celery -A tasks worker --loglevel=info
也有同样的问题;我通过比较main.py
中的PYTHONPATH
和控制台中运行芹菜工人的那个找到了解决方案。tasks.py
不在芹菜工人的PYTHONPATH
中,因此无法导入任务。
我的文件:
try_celery/tasks.py
from celery import Celery
app = Celery('tasks', broker='pyamqp://guest@localhost//', backend='redis://localhost')
@app.task
def add(x, y):
return x + y
try_celery/main.py
from try_celery.tasks import add
if __name__ == '__main__':
result = add.delay(4, 4)
while not result.ready():
pass
print(result.get())
run_worker.sh
#!/bin/bash
PYTHONPATH=$PYTHONPATH:/<path_to_project> # line this solved the problem
celery -A try_celery.tasks worker --loglevel=info
要执行,请首先运行run_worker.sh
然后运行python3 main.py
当我从IDE运行我的main.py
时,PYTHONPATH
已经用项目路径更新了
我通过重新加载celery.service
解决了同样的问题
sudo systemctl restart celery
如果您更改任务,您也需要重新启动服务
每次celery
启动时,它都会注册所有可以找到的任务