#python-3.x #django #celery
#python-3.x #django #сельдерей
Вопрос:
Я использую сельдерей для выполнения некоторых фоновых задач в django.
Celery worker выполняет задачи правильно в течение первых 45 минут. После этого задачи не выполняются.
Я использую Django == 2.2.13 и Celery == 4.4.7
И вот как я запускаю рабочий процесс celery и выполняю его.
celery worker -A app_name --loglevel=info
celery beat -A app_name --loglevel=info
файл настроек celery находится:
CELERY_ACKS_LATE = True
CELERYD_PREFETCH_MULTIPLIER = 1
CELERY_BROKER_URL = 'redis://localhost:6379'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
celery.py
from celery import Celery
from celery.schedules import crontab
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'app_name.settings')
app = Celery('app_name')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
app.conf.task_default_priority = 5
app.conf.beat_schedule = {
'parse_sources_manager_async': {
'task': 'parse_sources_manager_async',
'schedule': crontab(minute=0),
}
}
Есть ли способ заставить это работать, любая помощь будет оценена, заранее спасибо.
Комментарии:
1. Какова ценность
CELERY_BEAT_SCHEDULE
?2. сколько времени займет выполнение функции?
3. первоначально это работает в течение минуты. Позже это вообще не работает.
4. чтобы заставить его снова работать, я должен остановить celery worker, очистить все существующие задачи и перезапустить.
5. Я думаю, что задачи перекрываются. установите
minute
значение, превышающее время выполнения.
Ответ №1:
Я думаю, вам нужно изменить параметр crontab (минута = 59). Смотрите документацию
< https://docs.celeryproject.org/en/stable/reference/celery.schedules.html >
from celery import Celery
from celery.schedules import crontab
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'app_name.settings')
app = Celery('app_name')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
app.conf.task_default_priority = 5
app.conf.beat_schedule = {
'parse_sources_manager_async': {
'task': 'parse_sources_manager_async',
'schedule': crontab(minute=59), # I changed here
}
}
Комментарии:
1. Это не имеет никакого значения, я исправил это с помощью celery-singleton