Django Celery 目录结构和布局
Django Celery Directory Structure and Layout
我有一个使用以下目录结构的 django 项目。
project/
account/
models.py
views.py
blog/
models.py
views.py
mediakit/
models.py
views.py
reports/
celery.py <-- new
models.py
tasks.py <-- new
views.py
settings/
__init__.py <-- project settings file
system/
cron/
mongodb/
redis/
manage.py
这里是celery.py的内容,来源于celery教程(http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html)。
from __future__ import absolute_import
import os
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings')
from django.conf import settings
# app = Celery('reports')
app = Celery('reports',
backend='djcelery.backends.database:DatabaseBackend',
broker='amqp://guest:guest@localhost:5672//')
# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
我的一些应用程序是跨项目共享的。报告,例如可能用于 4 个不同的项目,所以
我可以看到 tasks.py 应该如何存在于报告应用程序中,所以当它被添加到一个新项目时
任务随之而来。我不太明白的是为什么 celery.py 需要存在于报告应用程序中
也。当我向帐户应用程序添加一些任务时,我基本上是在构建相同的 celery.py 文件
将 'reports' 替换为 'account'。我不应该有一个生活在同一水平的芹菜文件吗?
作为 manage.py?任何帮助或建议将不胜感激。
你只需要一个芹菜文件。建议您将它放在主项目目录中,或者您的设置所在的位置,只要 __init__
文件在同一文件夹中并且具有所需的调用即可。
celery 应用程序文件应该位于项目的核心目录中,以及您发布的文档中显示的设置和所有其他内容。
要定义可移植任务,将它们放在使用它们的应用程序中是有意义的,正如您所指出的,在您的情况下是报告应用程序。
这个想法是你的任务文件是由项目中定义的任何 celery 应用程序注册的,你的 django 应用程序不需要知道哪个 celery 应用程序正在注册任务。您可以使用 shared_task
装饰器代替 app.task
.
总结:
project/
project/
settings.py
celery.py <- new, shown in the docs, also add __init__.py
urls.py
account/
models.py
views.py
blog/
models.py
views.py
mediakit/
models.py
tasks.py <-- tasks for the me
views.py
reports/
models.py
tasks.py <-- tasks for the reports app
views.py
manage.py
在 tasks.py 你有这样的东西:
from celery import shared_task
@shared_task
def my_add_task(a, b):
return a + b
希望这对您有所帮助。
我有一个使用以下目录结构的 django 项目。
project/
account/
models.py
views.py
blog/
models.py
views.py
mediakit/
models.py
views.py
reports/
celery.py <-- new
models.py
tasks.py <-- new
views.py
settings/
__init__.py <-- project settings file
system/
cron/
mongodb/
redis/
manage.py
这里是celery.py的内容,来源于celery教程(http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html)。
from __future__ import absolute_import
import os
from celery import Celery
# set the default Django settings module for the 'celery' program.
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'settings')
from django.conf import settings
# app = Celery('reports')
app = Celery('reports',
backend='djcelery.backends.database:DatabaseBackend',
broker='amqp://guest:guest@localhost:5672//')
# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
我的一些应用程序是跨项目共享的。报告,例如可能用于 4 个不同的项目,所以 我可以看到 tasks.py 应该如何存在于报告应用程序中,所以当它被添加到一个新项目时 任务随之而来。我不太明白的是为什么 celery.py 需要存在于报告应用程序中 也。当我向帐户应用程序添加一些任务时,我基本上是在构建相同的 celery.py 文件 将 'reports' 替换为 'account'。我不应该有一个生活在同一水平的芹菜文件吗? 作为 manage.py?任何帮助或建议将不胜感激。
你只需要一个芹菜文件。建议您将它放在主项目目录中,或者您的设置所在的位置,只要 __init__
文件在同一文件夹中并且具有所需的调用即可。
celery 应用程序文件应该位于项目的核心目录中,以及您发布的文档中显示的设置和所有其他内容。
要定义可移植任务,将它们放在使用它们的应用程序中是有意义的,正如您所指出的,在您的情况下是报告应用程序。
这个想法是你的任务文件是由项目中定义的任何 celery 应用程序注册的,你的 django 应用程序不需要知道哪个 celery 应用程序正在注册任务。您可以使用 shared_task
装饰器代替 app.task
.
总结:
project/
project/
settings.py
celery.py <- new, shown in the docs, also add __init__.py
urls.py
account/
models.py
views.py
blog/
models.py
views.py
mediakit/
models.py
tasks.py <-- tasks for the me
views.py
reports/
models.py
tasks.py <-- tasks for the reports app
views.py
manage.py
在 tasks.py 你有这样的东西:
from celery import shared_task
@shared_task
def my_add_task(a, b):
return a + b
希望这对您有所帮助。