所以在我们的Django项目中,我们使用Celery和Django-Celery模块。最初编写任务部分的人是这样写的:
from djcelery import celery
@celery.task
def do_something():
...
但是在文档中的任何地方,它都表明我们应该创建一个单独的celery.py文件,并像这样导入应用程序:
celery.py
from celery import Celery
app = Celery('project')
if __name__=='__main__':
app.run()
tasks.py
from celery import app # Importing `app` from our celery.py
@app.task
def do_something():
...
所以我想知道这样做是否有问题?我们使用的是Django-Celery版本3.1
2条答案
按热度按时间js81xvg61#
首页start with celery documentation
Celery之前的版本需要一个单独的库才能与Django一起工作,但从3.1开始就不再是这样了。Django现在是开箱即用的,所以这个文档只包含了一个基本的方法来集成Celery和Django。您将使用与非Django用户相同的API,因此建议您先阅读Celery教程的第一步,然后再回到本教程。当你有一个工作的例子,你可以继续下一步指南。
同样,Django-celery的自述文件的第一行声明如下
老 Django celery 集成项目。
总结一下,django-celery是你的应用程序使用的老方法,新文档遵循处理celery的新方法
omtl5h9j2#
你提到的两种方法都是在Django项目中使用Celery定义任务的有效方法。区别在于如何构造代码和配置Celery。
在你提到的第一种方法中,任务是直接在Django项目的代码库中使用来自
djcelery
的@celery.task
装饰器定义的。这种方法效果很好,适用于较小的项目或您喜欢将任务定义与Django代码的其余部分保持在同一模块中的项目。在第二种方法中,您创建一个单独的
celery.py
文件,这是一个推荐的做法,适用于大型项目或希望将任务定义与主Django代码解耦的项目。通过使用单独的文件,您可以独立于Django项目的其余部分来配置Celery及其设置。这种方法提供了更大的灵活性,特别是如果您具有复杂的Celery配置或希望分离关注点。第二种方法允许您使用
celery
模块中的Celery
类配置Celery应用程序,而第一种方法使用djcelery
提供的celery
对象。与djcelery
中的celery
对象相比,celery
模块中的Celery
类提供了更多的配置选项和灵活性。如果您使用的是Django-Celery 3.1版本,那么它可能是一个较旧的版本,与最新版本相比,它可能具有不同的约定或建议。但是,您提到的这两种方法在3.1版本中仍然可以工作。
一般来说,如果你正在启动一个新项目,或者你可以灵活地进行更改,我建议你遵循第二种方法,使用一个单独的
celery.py
文件(应该在包含www.example.com的同一个文件夹中创建settings.py)。它提供了一个更清晰的关注点分离,并允许更广泛的Celery配置选项。在www.example.com中celery.py,在init.py的同一个文件夹中,复制粘贴下面的代码,
在www.example.com中settings.py,
在www.example.com中settings.py,
在命令提示符下写下面的代码来运行celery,
参考https://docs.celeryq.dev/en/stable/django/first-steps-with-django.html