Django芹菜注册定期任务

时间:2020-06-10 17:01:04

标签: django celery django-celery django-celery-beat

我将 Celery 4.4 Django 2.2

我必须创建一个定期任务,我要扩展 PeriodicTask 询问为


from celery.schedules import crontab
from celery.task import PeriodicTask

class IncompleteOrderHandler(PeriodicTask):
    run_every = crontab(
        minute='*/{}'.format(getattr(settings, 'INCOMPLETE_ORDER_HANDLER_PULSE', 5))
    )

    def run(self, *args, **kwargs):
        # Task definition
        eligible_users, slot_begin, slot_end = self.get_users_in_last_slot()
        map(lambda user: self.process_user(user, slot_begin, slot_end), eligible_users)

我以前打电话来注册上面的任务

from celery.registry import tasks

tasks.register(IncompleteOrderHandler)

但是registry中现在没有celery模块。如何注册上述定期任务?

1 个答案:

答案 0 :(得分:0)

我在基于班级的芹菜任务上遇到了同样的问题。这必须可行,但事实并非如此! 偶然地,我的问题在以下两个更改上被每个人解决了:

  1. 我在viewsets.py中的task.py中导入了一个基于类的任务,突然间我发现celery在task.py中找到了所有任务。

  2. 这是我的基本芹菜设置文件:

    from __future__ import absolute_import
    import os
    from celery import Celery
    from django.conf import settings
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'picha.settings')
    app = Celery('picha')
    app.config_from_object('django.conf:settings')
    app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
    

    我将最后一行更改为app.autodiscover_tasks(lambda: settings.CELERY_TASKS),并将CELERY_TASKS列表添加到settings.py并全部写入 然后在celery中找到task.py文件路径。

我希望其中一项能为您服务。