Я використовую селеру та джанго-селеру. Я визначив періодичне завдання, яке я хотів би перевірити. Чи можна запустити періодичне завдання з оболонки вручну, щоб я переглядав вихідні дані консолі?
Я використовую селеру та джанго-селеру. Я визначив періодичне завдання, яке я хотів би перевірити. Чи можна запустити періодичне завдання з оболонки вручну, щоб я переглядав вихідні дані консолі?
Відповіді:
Ви пробували просто запустити завдання з оболонки Django? Ви можете використовувати .applyметод завдання, щоб переконатися, що воно виконується завзято та локально.
Припускаючи, що завдання викликається my_taskв програмі Django myappв tasksпідмодулі:
$ python manage.py shell
>>> from myapp.tasks import my_task
>>> eager_result = my_task.apply()
Екземпляр результату має той самий API, що і звичайний AsyncResultтип, за винятком того, що результат завжди оцінюється охоче та локально, і .apply()метод буде блокувати, поки завдання не буде запущено до завершення.
manage.pyсценарію, який Django генерує у всіх каталогах проектів Django.) Вибачте.
Якщо ви маєте на увазі просто запустити завдання, коли умова не виконана, наприклад, періодичний час не відповідає. Ви можете зробити це у два етапи.
1. Отримайте ідентифікатор вашого завдання.
Ви можете зробити це, набравши текст.
celery inspect registered
Ви побачите щось подібне app.tasks.update_something. Якщо нічого, можливо, celeryце не було розпочато. Просто запусти його.
2. Запустіть завдання за допомогою celery call
celery call app.tasks.update_something
Щоб отримати докладнішу інформацію, просто введіть
celery --help
celery inspect --help
celery call --help
celery -A yourapp call app.tasks.update_something --kwargs='{"key": value,...}'
inspectце чудово, на жаль, він доступний лише для "транспорту RabbitMQ (AMQP) та Redis". (не інші, наприклад, filesystemнаприклад)
Я думаю, вам потрібно буде відкрити дві оболонки: одну для виконання завдань з оболонки Python / Django, а другу для запуску celery worker( python manage.py celery worker). І як було сказано в попередній відповіді, ви можете запускати завдання за допомогою apply()абоapply_async()
Я відредагував відповідь, тому ви не використовуєте застарілу команду.