首页 > 解决方案 > 将函数用作视图和 celery 任务

问题描述

我使用 Django 2.2.12 和 Celery 4.4.7

我有一些功能(例如:下载图片)既需要用作视图,也需要用作计划的重复任务。设置它的最佳方法是什么?下面的代码生成以下错误消息:

NameError:名称“下载图片”未定义

下载app/views.py

def downloadpictures(request=None):
    xxx
    xxx

下载app/tasks.py

from downloadapp import downloadpictures

@shared_task
def downloadpicturesregular():
    downloadpictures()

celery_tasks.py

app.conf.beat_schedule = {
    'downloadpictures_regular':
        {
            'task': 'downloadapp.tasks.downloadpicturesregular',
            'schedule': crontab(hour=18, minute=40, day_of_week='thu,sun'),
        },
        },

标签: pythondjangocelerydjango-celerycelerybeat

解决方案


通常,您的视图需要了解您的任务,而您的任务不关心视图。如果您的应用程序符合该假设,您应该将逻辑拉出到第三个模块或tasks.py函数中。然后从任务和视图中调用该函数,或者从视图中调用任务。


推荐阅读