Задачи Django Celery не выполняются через час

#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