Як я можу запустити періодичне завдання селери з оболонки вручну?


77

Я використовую селеру та джанго-селеру. Я визначив періодичне завдання, яке я хотів би перевірити. Чи можна запустити періодичне завдання з оболонки вручну, щоб я переглядав вихідні дані консолі?

Відповіді:


108

Ви пробували просто запустити завдання з оболонки 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()метод буде блокувати, поки завдання не буде запущено до завершення.


Як я можу зробити те саме для проекту піраміди? Структура каталогів буде виглядати так: / myproject => celeryconfig.py, setup.py, development.py, / views / celerytasks => mycelerytask.py. Зараз тут я хочу запустити "mycelerytask.py" (що є періодичним завданням) вручну з командного рядка. Ви можете допомогти?
Workonphp

@Workonphp, на жаль, я не знайомий з Pyramid, тому я не знаю, як Celery взагалі інтегрується з Pyramid. (Зверніть увагу, що моє рішення вище стосується Django, вимагаючи manage.pyсценарію, який Django генерує у всіх каталогах проектів Django.) Вибачте.
Platinum Azure

22

Якщо ви маєте на увазі просто запустити завдання, коли умова не виконана, наприклад, періодичний час не відповідає. Ви можете зробити це у два етапи.

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

2
він також підтримує args і kwargs $ celery -Виклик yourapp app.tasks.update_something --kwargs = '{"key": value, ...}
AlonS

1
Це дуже корисно, але в кінці відсутня дужка. Виправлено:celery -A yourapp call app.tasks.update_something --kwargs='{"key": value,...}'
Ерік Калкокен

Хоча inspectце чудово, на жаль, він доступний лише для "транспорту RabbitMQ (AMQP) та Redis". (не інші, наприклад, filesystemнаприклад)
Рам,

7

Я думаю, вам потрібно буде відкрити дві оболонки: одну для виконання завдань з оболонки Python / Django, а другу для запуску celery worker( python manage.py celery worker). І як було сказано в попередній відповіді, ви можете запускати завдання за допомогою apply()абоapply_async()

Я відредагував відповідь, тому ви не використовуєте застарілу команду.


3
manage.py celeryd засуджується Зараз: stackoverflow.com/a/23921568/1459594
rschwieb
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.