繁体   English   中英

Django + Celery的PeriodicTask

[英]PeriodicTask with Django + Celery

我正在尝试在项目中执行定期任务,但是无法使其正常工作。 在我的开发人员中,我像这样执行芹菜:

python manage.py celery worker -l info

但是当我尝试:

celery -B -l info

要么

python manage.py celery -B -l info

我收到Connection refused error 我还安装了flower来监视任务是否已执行。 我还有其他从代码执行的任务,但是现在我想做一个定期任务。

我的任务(实际上有效)是从celery.task.Task继承的,而我想从celery.task.PeriodicTask定期发布的Task是这样的:

from celery.task import PeriodicTask

TaskToBePeriodical(PeriodicTask):
    run_every = crontab()  # This should make it execute every minute, just for test
    def run(self, **kwargs):
        # Do something awesome...

看来您启动芹菜的命令不太正确。
根据您要计划的时间,您可能需要尝试将其设置为celery.beat。

可能值得注意的是,此方法不使用django-celery,因为Celery文档提到“不再需要此项目”

参见此处以了解有关celery.beat的更多信息: http ://celery.readthedocs.org/en/latest/reference/celery.beat.html

芹菜启动命令

celery -A proj.celery_app worker -l info -B

项目目录

+-- proj
|   +-- celery_app.py
|   +-- settings.py
|   +-- urls.py
|   +-- ...
+-- app
|   +-- models.py
|   +-- tasks.py
|   +-- urls.py
|   +-- views.py
|   +-- ...

celery_app.py

from __future__ import absolute_import

import os

from celery import Celery

# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings')

from django.conf import settings

app = Celery('proj')

# 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))

settings.py

CELERYBEAT_SCHEDULE = {
    'name_of_task': {
        'task': 'app.tasks.periodic_task',
        'schedule': crontab()
    }
}

task.py

from __future__ import absolute_import
from celery import shared_task

@shared_task
def periodic_task():
    # Do your awesome thing
    return

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM