Я пытаюсь периодически запускать функцию и для этого установить 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()
, но не повезло ...