Пример периодической задачи Django Celery - PullRequest
0 голосов
/ 25 мая 2018

Мне нужен минимальный пример для выполнения периодических задач (запускать какую-то функцию через каждые 5 минут или запускать что-то в 12:00:00 и т. Д.).

В моем myapp/tasks.py у меня есть

from celery.task.schedules import crontab
from celery.decorators import periodic_task
from celery import task


@periodic_task(run_every=(crontab(hour="*", minute=1)), name="run_every_1_minutes", ignore_result=True)
def return_5():
    return 5


@task
def test():
    return "test"

Когда я запускаю работников из сельдерея, он показывает задачи (приведенные ниже), но не возвращает никаких значений (в терминале или цветке).

[tasks]
  . mathematica.core.tasks.test
  . run_every_1_minutes

Пожалуйста, предоставьте минимальный пример или подсказки для достижения желаемых результатов.

Справочная информация:

У меня есть config/celery.py, который содержит следующее:

import os
from celery import Celery

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "config.settings.local")

app = Celery('config')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()

И в моем config/__init__.py у меня есть

from .celery import app as celery_app

__all__ = ['celery_app']

Я добавил функцию, подобную приведенной ниже, в myapp/tasks.py

from celery import task

@task
def test():
    return "test"

Когда язапустить test.delay() из оболочки, он успешно работает, а также отображает информацию о задаче в цветке

1 Ответ

0 голосов
/ 25 мая 2018

Чтобы запустить периодическое задание, вы должны запустить также сельдерей beat .Вы можете запустить его с помощью этой команды:

celery -A proj beat

Или, если вы используете одного работника:

celery -A proj worker -B
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...