Python 创建芹菜任务的不同方法之间的差异

Python 创建芹菜任务的不同方法之间的差异,python,django,celery,django-celery,celery-task,Python,Django,Celery,Django Celery,Celery Task,我对创建芹菜任务的不同方法感到非常困惑。从表面上看,它们的工作原理是一样的,那么,有人能解释一下它们之间的区别吗 一, 二, 三, 通过一点谷歌搜索,我知道第1个和第3个任务之间的区别是shared_task在没有具体应用程序实例时使用。有人能详细说明一下吗?第二个什么时候用?不要用#2,除非你用的是芹菜v3。如果您使用芹菜v4,请使用#1 在编写可重用库或django应用程序时,请使用#3。例如,如果您正在编写一组开放源代码的任务,允许您使用芹菜管理aws ec2实例,您可以使用shared_

我对创建芹菜任务的不同方法感到非常困惑。从表面上看,它们的工作原理是一样的,那么,有人能解释一下它们之间的区别吗

一,

二,

三,

通过一点谷歌搜索,我知道第1个和第3个任务之间的区别是
shared_task
在没有具体应用程序实例时使用。有人能详细说明一下吗?第二个什么时候用?

不要用#2,除非你用的是芹菜v3。如果您使用芹菜v4,请使用#1

在编写可重用库或django应用程序时,请使用#3。例如,如果您正在编写一组开放源代码的任务,允许您使用芹菜管理aws ec2实例,您可以使用
shared_task
,这样这些任务就可以在芹菜上运行,但您可以让使用库的人自己配置芹菜


如果您是为自己的项目编写,并且不考虑重复使用,请使用#1

第二种方法只针对芹菜v3吗?如果我们在v4中使用呢?第一个和第二个有什么区别吗?除了芹菜版本外,它们是否完全相同?据我所知,是的,第二个版本只针对v3,不应与v4一起使用。#1和#2之间有区别,但这是因为v4与v3有根本的不同。在v4中,使用decorator本质上是将任务注册为可运行的,用于使用该应用程序实例启动的任何工作程序。我认为v3中没有类似的概念。我们正在使用#2方法声明Django 1.11应用程序中使用芹菜4.3.0的所有任务,并且一切似乎都按照预期工作。即使是最新的芹菜医生似乎也可以互换使用它。您是否有任何关于功能上的不推荐或更改的具体来源?我被#1弄糊涂了,您在项目中的什么地方写这篇文章?如果出现以下情况,这也可能是proj.芹菜导入应用程序中的

from myproject.tasks import app

@app.task
def foo():
    pass
from celery import task

@task
def foo():
    pass
from celery import shared_task

@shared_task
def foo():
    pass