11

我正在尝试获得 celery 的官方教程工作,但不断收到此错误:

D:\test>celery -A tasks worker --loglevel=info
-------------- celery@BLR122S v3.0.17 (Chiastic Slide)
---- **** --- --
--- * * * -- [配置]
-- * - **** --- . 经纪人:amqp://guest@localhost:5672//
- ** ---------- 。应用程序:任务:0x2a76850
- ** ---------- 。并发:2(进程)
- ** ---------- 。事件:关闭(启用 -E 监控此工作人员)
- ** ----------
- *
--- * --- [队列]
-- ******* ---- . 芹菜:交换:芹菜(直接)绑定:芹菜
--- ***** -----
[任务]
。tasks.add
[2013-03-29 17:50:52,533: WARNING/MainProcess] celery@BLR122S 准备好了。
[2013-03-29 17:50:52,568:INFO/MainProcess] 消费者:连接到 amqp://guest@127.0.0.1:5672//。
[2013-03-29 17:51:32,496:INFO/MainProcess] 从代理获得任务:tasks.add [8345 9233-ce54-40ed-a2a8-ee0d60768006]
[2013-03-29 17:51:32,562:错误/ MainProcess] 任务 tasks.add[83459233-ce54-40ed-a 2a8-ee0d60768006] 引发异常:“tasks.add”类型的任务未注册,请确保已导入。
回溯(最近一次通话最后):

文件“C:\Python27\lib\site-packages\billiard\pool.py”,第 293 行,在 worker 中

结果 = (True, func(*args, **kwds))
文件“C:\Python27\lib\site-packages\celery\task\trace.py”,第 320 行,在 _fast_trace_task
返回 _tasks[task].__trace__( uuid, args, kwargs, request)[0]
文件“C:\Python27\lib\site-packages\celery\app\registry.py”,第 20 行,在 __missing__
raise self.NotRegistered(key)
NotRegistered: 'tasks.添加'

我安装了 celery==3.0.17 和 rabbitMQ。然后通过 " "
开始 celery似乎在 [Tasks] 中,但是通过以下方式调用:D:\test>celery -A tasks worker --loglevel=info
tasks.add

>>> from tasks import add
>>> add.delay(1,1)
# Out: AsyncResult: 83459233-ce54-40ed-a2a8-ee0d60768006

得到了上面的失败。有没有人有同样的问题?

编辑: 这是我从教程中复制的 tasks.py。

from celery import Celery

celery = Celery('tasks', broker='amqp://guest@localhost//')

@celery.task
def add(x, y):
    return x + y
4

3 回答 3

4

尝试先导入任务,我建议你在交互式 python 环境中实现你的工作,比如 python IDE,然后你这样做:

  • 导入任务

在你写之前tasks.add

于 2013-03-29T10:36:23.527 回答
4

以下将解决您的问题

from tasks import add
res = add.delay(1,2) #call to add 
res.get() #get result

使用更改后重新启动您的工作人员

celery -A tasks worker --loglevel=info
于 2018-05-04T23:02:01.643 回答
4

有同样的问题;我通过比较PYTHONPATHmain.py的和运行芹菜工人的控制台找到了解决方案。tasks.pyPYTHONPATH适合芹菜工人,因此无法导入任务。

我的文件:

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 当我main.py从 IDE 运行时,PYTHONPATH已经用项目路径更新了

于 2020-07-09T16:12:11.747 回答