将函数用作视图和芹菜任务

问题描述

我使用 Django 2.2.12 和 Celery 4.4.7

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

NameError: name 'downloadpictures' 未定义

downloadapp/views.py

def downloadpictures(request=None):
    xxx
    xxx

downloadapp/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'),},

解决方法

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...