Периодически запускайте функцию в Django с помощью сельдерея и cronjob - PullRequest
1 голос
/ 04 марта 2020

Я пытаюсь периодически запускать функцию и для этого установить celery. Но что-то не так, потому что функция не работает в конце. Я думаю, что-то сделал на дороге, но не смог ее найти. Итак, позвольте мне объяснить шаги в моем Django проекте.

папка проекта src, которую я настраиваю redis.

# REDIS related settings 
REDIS_HOST = 'localhost'
REDIS_PORT = '6379'
BROKER_URL = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'
BROKER_TRANSPORT_OPTIONS = {'visibility_timeout': 3600} 
CELERY_RESULT_BACKEND = 'redis://' + REDIS_HOST + ':' + REDIS_PORT + '/0'

и celery.py в src каталог.

import os
from celery import Celery
from django.conf import settings
from celery.schedules import crontab

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

app = Celery('src')
app.config_from_object('django.conf:settings')

# Load task modules from all registered Django app configs.
app.autodiscover_tasks(settings.INSTALLED_APPS)

app.conf.beat_schedule = {
    'create-tasks-histories': {
        'task': 'myApp.views.historyFunction',
        'schedule': crontab(hour=12, minute=7, day_of_week="wed")
    },
}

в view.py

def historyFunction(request):
    print("periodic function")

    return Response()

затем я запускаю команду $ celery -A src beat Итак, проверяя терминал, на котором запущено приложение django. Но нет print()

Так что здесь не так? И как лучше периодически запускать функцию?

Я также попробовал гораздо более простой и легкий способ, который ПРЯМО в views.py

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

@periodic_task(run_every=crontab(hour=11, minute=53, day_of_week="wed"))
def historyFunction(request):
    print("periodic function")

    return Response()

, но не повезло ...

...