首页 > 解决方案 > 无法使用 Celery 获得 hello world - 未配置后端

问题描述

我曾Celeryamqp

[tasks]
  . celery_tasks.add

[2021-09-27 11:31:53,088: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672//
[2021-09-27 11:31:53,107: INFO/MainProcess] mingle: searching for neighbors
[2021-09-27 11:31:54,166: INFO/MainProcess] mingle: all alone
[2021-09-27 11:31:54,212: INFO/MainProcess] celery@ZenBook ready.
[2021-09-27 11:31:54,213: INFO/MainProcess] Task celery_tasks.add[14dc1745-fbec-4cd0-b0f7-298d6de415f0] received
[2021-09-27 11:31:54,315: INFO/ForkPoolWorker-4] Task celery_tasks.add[14dc1745-fbec-4cd0-b0f7-298d6de415f0] succeeded in 0.0002332700023544021s: 8

celery_tasks.add很简单:

from celery import Celery

app = Celery('tasks', broker='pyamqp://guest@localhost//')

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

我试着这样称呼Celery task它:

from celery import Celery

from celery_tasks import add

app = Celery(broker = 'amqp://guest:guest@localhost:5672//', backend='rpc://')
result = add.delay(4, 4)
print(result.get(timeout=1))

但无论我做什么,我都会收到这个错误NotImplementedError

Traceback (most recent call last):
  File "celery_tasks_client.py", line 11, in <module>
    print(result.get(timeout=1))
  File "/home/idf/anaconda3/lib/python3.8/site-packages/celery/result.py", line 223, in get
    return self.backend.wait_for_pending(
  File "/home/idf/anaconda3/lib/python3.8/site-packages/celery/backends/base.py", line 703, in wait_for_pending
    meta = self.wait_for(
  File "/home/idf/anaconda3/lib/python3.8/site-packages/celery/backends/base.py", line 1034, in _is_disabled
    raise NotImplementedError(E_NO_BACKEND.strip())
NotImplementedError: No result backend is configured.
Please see the documentation for more information.

但是,worker最后,我确实看到这是成功的:

...
2021-09-27 12:00:55,684: INFO/ForkPoolWorker-4] Task celery_tasks.add[f0b863dc-7df5-4a05-86f8-d7852c4faf0f] succeeded in 0.00010713499796111137s: 8

编辑 1

我刚刚注意到工作人员以这些消息启动。请注意,backend已禁用:

-------------- celery@ZenBook v5.1.2 (sun-harmonics)
--- ***** ----- 
-- ******* ---- Linux-5.11.0-36-generic-x86_64-with-glibc2.10 2021-09-27 12:02:38
- *** --- * --- 
- ** ---------- [config]
- ** ---------- .> app:         tasks:0x7f843974dc10
- ** ---------- .> transport:   amqp://guest:**@localhost:5672//
- ** ---------- .> results:     disabled://
- *** --- * --- .> concurrency: 6 (prefork)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** ----- 
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery

我看到了这个答案,但是如果我不使用django怎么办?

编辑 2

想通了,必须用后端启动工作人员,例如:

app = Celery('tasks', broker='pyamqp://guest@localhost//', backend='rpc')

标签: celerycelery-task

解决方案


推荐阅读