CELERYBEAT_SCHEDULE中的任务未被处理

时间:2016-08-04 17:46:34

标签: python django celery django-celery

我正在尝试在Celery中设置一个虚拟任务,每3秒运行一次但到目前为止收效甚微。这是我得到的输出:

enter image description here

我按如下方式设置了芹菜:

settings.py 中:

from datetime import timedelta

BROKER_URL = 'redis://localhost:6379/0'
CELERY_RESULT_BACKEND = 'redis://localhost:6379'
CELERY_ACCEPT_CONTENT = ['application/json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
CELERY_TIMEZONE = 'UTC'
CELERY_IMPORTS = ("api.tasks")
CELERYBEAT_SCHEDULE = {
    'add_job': {
        'task': 'add_job',
        'schedule': timedelta(seconds=3),
        'args': (16, 16)
    },
}
CELERY_TIMEZONE = 'UTC'

celery.py

from __future__ import absolute_import
import os
from celery import Celery
from django.conf import settings

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'blogpodapi.settings')
app = Celery(
    'blogpodapi',
)

# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)


@app.task(bind=True)
def debug_task(self):
    print('Request: {0!r}'.format(self.request))

tasks.py

from celery.task import task

@task(name='add_job')
def add_job(x, y):
    r = x + y
    print "task arguments: {x}, {y}".format(x=x, y=y)
    print "task result: {r}".format(r=r)
    return r

我在设置方式上做错了什么?

3 个答案:

答案 0 :(得分:2)

好的,我发现的最基本错误是您settings.py中提及的大部分设置需要进入celery.py

特别是CELERYBEAT_SCHEDULE

你正在做一切写作,只是你的芹菜正在等待一个任务,它从来没有收到,因为它从celery.py读取而不是从settings.py读取。因此什么也没发生。

请参阅我的 celery.py 以及 settings.py 作为参考。

celery.py - > https://github.com/amyth/hammer/blob/master/config/celery.py

settings.py - > https://github.com/amyth/hammer/blob/master/config/settings.py

我使用过 crontab ,因为我想在一天的特定时间执行任务。所以你不必担心它。你的事情非常适合你想做的事情。

此外,无论您使用芹菜的任何博客或教程,请再次检查所需的设置究竟是什么以及是否需要全部这些设置。

答案 1 :(得分:1)

只能回答,因为这是我在CELERYBEAT_SCHEDULE上搜索时的第一个结果。

原因对我来说不起作用,是因为它应该是CELERY_BEAT_SCHEDULE

答案 2 :(得分:1)

关于您的任务为什么不运行的原因:未注册。如果是这样,那么Celery worker启动时的输出将是不同的-它至少包含以下两行:

[tasks]
  . add_job