芹菜教程:NotRegistered错误



我正试图获得芹菜的官方教程,但一直收到这个错误:

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启动时,它都会注册所有可以找到的任务

相关内容

  • 没有找到相关文章

最新更新