【问题标题】:Django Celery Tasks are not executed after an hour一小时后不执行 Django Celery 任务
【发布时间】:2020-12-26 19:35:19
【问题描述】:

我正在使用 celery 在 django 中运行一些后台任务。

Celery 工人在前 45 分钟内正确执行任务。 之后不会执行任务。

我正在使用 Django==2.2.13 和 Celery==4.4.7

这就是我启动芹菜工人和击败的方式。

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),
    }
}

有没有办法让它工作,任何帮助将不胜感激,在此先感谢。

【问题讨论】:

  • CELERY_BEAT_SCHEDULE 的值是多少?
  • 函数执行需要多长时间?
  • 最初它会在一分钟内工作。后来它根本不起作用。
  • 要让它再次工作,我必须停止 celery worker,清除所有现有任务并重新启动。
  • 我认为任务是重叠的。将minute 设置为大于执行时间的值。

标签: python-3.x django celery


【解决方案1】:

我认为你必须更改 crontab(minute=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
    }
}

【讨论】:

  • 这没什么区别,我用 celery-singleton 解决了这个问题
最近更新 更多