celery - 无法使用 Celery 获得 hello world - 未配置后端
问题描述
我曾Celery
与amqp
:
[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')
解决方案
推荐阅读
- html - 我无法在 Angular 应用程序的打印对话框中更改布局
- yaml - 从可选的 YAML 文件中读取空手道配置 - 是否检查文件是否存在?
- rust - Rc Refcell 的变异字段取决于其其他内部字段
- r - 将图片作为单元格的内容时,kableExtra 不起作用
- python - pygame 中的增长函数 - SnakeGame
- python - 如何在 Matplotlib 饼图周围绘制箭头以将每个标签指向圆圈中的相应部分?
- r - rasterVis levelplot 图例绘图错误
- linux - 验证在同一物理机上运行的另一个进程的身份
- graphml - GraphML 是否与 GXL、GML、XGMML 或 SVG 兼容?
- angular - Angular 上的登录路径