Я використовую селеру та джанго-селеру. Я визначив періодичне завдання, яке я хотів би перевірити. Чи можна запустити періодичне завдання з оболонки вручну, щоб я переглядав вихідні дані консолі?
Я використовую селеру та джанго-селеру. Я визначив періодичне завдання, яке я хотів би перевірити. Чи можна запустити періодичне завдання з оболонки вручну, щоб я переглядав вихідні дані консолі?
Відповіді:
Ви пробували просто запустити завдання з оболонки 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()
Я відредагував відповідь, тому ви не використовуєте застарілу команду.