获取在芹菜上运行任务的结果(Windows 10 32位)

2024-04-19 19:52:57 发布

您现在位置:Python中文网/ 问答频道 /正文

从早上开始,我已经围绕这个问题工作了大约10个小时,但找不到任何解决方案

我在学用芹菜。我想在我的django项目中使用它。我遵循了官方的教程,但我无法得到我的任务的结果

无论是否配置了后端,我在尝试访问结果时都会遇到以下错误:

Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "G:\progs\python\Django-projects\celery_tutorial\env\lib\site-packages\celery\result.py", line 223, in get
    return self.backend.wait_for_pending(
  File "G:\progs\python\Django-projects\celery_tutorial\env\lib\site-packages\celery\backends\base.py", line 698, in wait_for_pending
    meta = self.wait_for(
  File "G:\progs\python\Django-projects\celery_tutorial\env\lib\site-packages\celery\backends\base.py", line 1029, in _is_disabled
    raise NotImplementedError(E_NO_BACKEND.strip())
NotImplementedError: No result backend is configured.
Please see the documentation for more information.

以下是我的文件夹结构:

|- task_exe
   |- celery.py
   |- settings.py
   |- ...
|- tadder
   |- tasks.py
   |- ...
|- env
|- manage.py
|- ...

这是我的芹菜.py文件:

from __future__ import absolute_import, unicode_literals
from celery import Celery
from tadder.tasks import add

import os
os.environ.setdefault("DJANGO_SETTINGS_MODULE", 'task_exe.settings')
app = Celery("task_exe", backend='rpc://' , broker='amqp://localhost')
app.config_from_object('django.conf:settings', namespace="CELERY")

app.autodiscover_tasks()

这是我的tasks.py文件:

from __future__ import absolute_import, unicode_literals
from celery import shared_task

@shared_task
def add(a, b): return a + b

这是我用来启动芹菜工人的命令:(使用windows 10 32位)

path/to/my_django_project_where_you_can_find_manage.py> celery -A task_exe workter -l info --pool=solo

当我注册一个任务时,它被芹菜接收并执行,我可以在输出控制台中看到结果。但是当我尝试使用result.get()来获得结果时,我得到了上面提到的错误

我还尝试更改后端。我将后端更改为“db”+sqlite://result.sqlite3“当我开始做芹菜工人时,创建了一个result.sqlite3文件。我还在生成的.sqlite3文件中找到了任务的id,但它没有改变任何内容。我仍然得到错误

下面是我用来注册任务和检索结果的命令(来自django的交互式shell(manage.py shell)的输出):

>>> from tadder.tasks import add  
>>> r = add.delay(10, 20)
>>> r.status
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "G:\progs\python\Django-projects\celery_tutorial\env\lib\site-packages\celery\result.py", line 477, in state
    return self._get_task_meta()['status']
  File "G:\progs\python\Django-projects\celery_tutorial\env\lib\site-packages\celery\result.py", line 416, in _get_task_meta  
    return self._maybe_set_cache(self.backend.get_task_meta(self.id))
  File "G:\progs\python\Django-projects\celery_tutorial\env\lib\site-packages\celery\backends\base.py", line 558, in get_task_meta
    meta = self._get_task_meta_for(task_id)
AttributeError: 'DisabledBackend' object has no attribute '_get_task_meta_for'
>>> r.get()
Traceback (most recent call last):
  File "<console>", line 1, in <module>
  File "G:\progs\python\Django-projects\celery_tutorial\env\lib\site-packages\celery\result.py", line 223, in get
    return self.backend.wait_for_pending(
  File "G:\progs\python\Django-projects\celery_tutorial\env\lib\site-packages\celery\backends\base.py", line 698, in wait_for_pending
    meta = self.wait_for(
  File "G:\progs\python\Django-projects\celery_tutorial\env\lib\site-packages\celery\backends\base.py", line 1029, in _is_disabled
    raise NotImplementedError(E_NO_BACKEND.strip())
NotImplementedError: No result backend is configured.
Please see the documentation for more information.
>>>

下面是芹菜工人控制台的输出:

-------------- celery@DESKTOP-N6RJF73 v5.1.1 (sun-harmonics)   
--- ***** -----
-- ******* ---- Windows-10-10.0.19041-SP0 2021-06-20 17:18:15   
- *** --- * ---
- ** ---------- [config]
- ** ---------- .> app:         task_exe:0x35c2778
- ** ---------- .> transport:   amqp://guest:**@localhost:5672//
- ** ---------- .> results:     rpc://
- *** --- * --- .> concurrency: 2 (solo)
-- ******* ---- .> task events: OFF (enable -E to monitor tasks in this worker)
--- ***** -----
 -------------- [queues]
                .> celery           exchange=celery(direct) key=celery


[tasks]
  . tadder.tasks.add

[2021-06-20 17:18:15,954: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672//
[2021-06-20 17:18:15,990: INFO/MainProcess] mingle: searching for neighbors
[2021-06-20 17:18:17,044: INFO/MainProcess] mingle: all alone
[2021-06-20 17:18:17,101: WARNING/MainProcess] g:\progs\python\django-projects\celery_tutorial\env\lib\site-packages\celery\fixups\django.py:20xups\django.py:203: UserWarning: Using settings.DEBUG leads to a memory
            leak, never use this setting in production environments!
  warnings.warn('''Using settings.DEBUG leads to a memory

[2021-06-20 17:18:17,102: INFO/MainProcess] celery@DESKTOP-N6RJF73 ready.
[2021-06-20 17:19:35,297: INFO/MainProcess] Task tadder.tasks.add[77f22b77-e7ab-4a67-b12c-b8ebc282b629] received
[2021-06-20 17:19:40,170: INFO/MainProcess] Task tadder.tasks.add[77f22b77-e7ab-4a67-b12c-b8ebc282b629] succeeded in 0.0s: 30 
[2021-06-20 17:32:16,356: INFO/MainProcess] Task tadder.tasks.add[cf8351d7-c8df-47e1-826d-26f6dcb007ac] received
[2021-06-20 17:32:16,358: INFO/MainProcess] Task tadder.tasks.add[cf8351d7-c8df-47e1-826d-26f6dcb007ac] succeeded in 0.0s: 30

谁能帮我把这玩意弄到手吗


Tags: inpyenvfortasklibpackagesline
1条回答
网友
1楼 · 发布于 2024-04-19 19:52:57

How to run celery on windows?
我在Windows中总是遇到芹菜问题,即使从技术上讲,您可以使用您已经指出的 pool=solo命令运行芹菜。该文档在这方面有点误导,我总是得到不一致的功能。我最终得到了适用于Windows、ubuntu 20的WSL,我整天都在用进程和线程运行redis(或rabbitmq),没有任何问题。此外,它更能模拟生产环境,因为您很可能不会只运行一个工人。

这是我的测试配置示例

app = Celery ('app', broker="redis://", backend="redis://", include=['app.tasks'])

显然,在4.0中删除了支持,但在4.3中重新添加了支持。我相信有人用Windows10的机器,在我的windows上运行芹菜,可以插话

相关问题 更多 >