Асинхронные задачи Python Сельдерей не выполняются

#python #celery

#питон #сельдерей

Вопрос:

Я учусь использовать сельдерей для создания асинхронных задач на python

это мой код

 from celery import Celery import time  app = Celery("hello", backend="rpc://", broker="amqp://guest@localhost//")   @app.task def hello():  time.sleep(5)  with open("./test.txt", "w ", encoding="utf-8") as fp:  fp.write("ok")   return "hello world"  

Информация о запуске сельдерея

 gt; celery -A main worker -l INFO    -------------- celery@ajanuw v5.2.1 (dawn-chorus)  --- ***** ----- -- ******* ---- Windows-10-10.0.19043-SP0 2021-12-07 08:56:00 - *** --- * --- - ** ---------- [config] - ** ---------- .gt; app: hello:0x1c616583040  - ** ---------- .gt; transport: amqp://guest:**@localhost:5672// - ** ---------- .gt; results: rpc:// - *** --- * --- .gt; concurrency: 12 (prefork) -- ******* ---- .gt; task events: OFF (enable -E to monitor tasks in this worker) --- ***** -----  -------------- [queues]  .gt; celery exchange=celery(direct) key=celery   [tasks]  . main.hello  [2021-12-07 08:56:00,970: INFO/MainProcess] Connected  to amqp://guest:**@127.0.0.1:5672// [2021-12-07 08:56:01,013: INFO/MainProcess] mingle: searching for neighbors [2021-12-07 08:56:01,370: INFO/SpawnPoolWorker-4] child process 2000 calling self.run()    [2021-12-07 08:56:14,018: INFO/MainProcess] Task main.hello[010042fd-4839- received  

Вызовите функцию приветствия

 gt;gt;gt; from main import *  gt;gt;gt; hello.delay() lt;AsyncResult: 010042fd-4839-46c0-8602-cf192f6b50b9gt;  

Я не знаю, что пошло не так, файл не был создан

Информация о версии

 gt; python -V Python 3.10.0  celery==5.2.1  rabbitmq:3.9.11-management  

введите описание изображения здесь

Комментарии:

1. Каков результат ваших .state .get() действий и ?

2. Я предполагаю, что это текущий каталог, когда он пытается открыть файл? используйте полный путь

3. @fooiey Я только что проверил, что состояние всегда «В ОЖИДАНИИ», и get не может получить значение

4. @PeterMoore Я не знаю, проблема ли в пути, но когда я звоню hello() синхронно, файл будет создан, но файл не создается hello.delay() при асинхронном вызове.

Ответ №1:

Независимо от того, как проходит тест в Windows, он не будет успешным, поэтому я установил Python 3.8.10 на wsl ubuntu для тестирования и обнаружил, что асинхронная задача может быть выполнена правильно. Я не знаю, почему это не работает на Windows.