#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.