Нерегулярное поведение сельдерея - PullRequest
0 голосов
/ 03 апреля 2020

Я очень новичок в Сельдерей , и я пытаюсь использовать его для планирования функции, но, кажется, она не работает должным образом. Вот мой settings.py: (Наряду с настройками по умолчанию, заданными django)

CELERY_BROKER_URL = 'amqp://guest:guest@localhost'
CELERY_ACCEPT_CONTENT = ['json']
CELERY_RESULT_BACKEND = 'db+sqlite:///results.sqlite'
CELERY_TASK_SERIALIZER = 'json'

celery.py:

rom __future__ import absolute_import, unicode_literals
import os
from celery import Celery
from celery.schedules import crontab

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mera_project.settings')

app = Celery('mera_project')

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

app.autodiscover_tasks()

init.py:

from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app

__all__ = ['celery_app']

tasks_notes/tasks.py: (tasks_notes - это имя моего приложения)

from celery.decorators import periodic_task
from celery.task.schedules import crontab
from tasks_notes.models import BudgetInfo

@periodic_task(run_every=(crontab(minute='*/15')))
def monthly_starting_value():
    print("hi")
    return 0

views.py:

from .tasks import monthly_starting_value
def app_view(request):
   abcd = monthly_starting_value.delay()
    print("new"+str(abcd))

Я ожидал значения ноль и привет в моем терминале, но вместо этого я получил случайное число в виде new 42bf83ef-850f-4b34-af78-da696d2ee0f2 , и случайное число продолжает меняться каждые 15 минут. Во вкладке терминала `` celery beat``` 'я получаю что-то вроде:

WARNING/ForkPoolWorker-9] hi
Task tasks_notes.tasks.monthly_starting_value[42bf83ef-850f-4b34-af78-da696d2ee0f2] succeeded in 0.0009442089994990965s: 0

каждые 15 минут. Я даже пытался `` app.beat.conf_schedule in celery.py```, а также пытался запустить его в режиме администратора, но он не работает должным образом.

Где я могу ошибаться?

Любая помощь высоко ценится.

1 Ответ

1 голос
/ 03 апреля 2020

Это определенно не является нерегулярным - он ведет себя именно так, как и должно. Если вы хотите получить результат задачи, то у вас должно быть что-то вроде:

abcd = monthly_starting_value.delay().get()

delay () возвращает экземпляр класса AsyncResult.

Наконец, не вызывайте print ( ) внутри задачи. Используйте регистратор сельдерея.

Пример:

import os
from celery.utils.log import get_task_logger
from worker import app

logger = get_task_logger(__name__)

@app.task()
def add(x, y):
    result = x + y
    logger.info(f'Add: {x} + {y} = {result}')
    return result
...