2015-05-07 1 views
2

У меня есть проект django, используя следующую структуру каталогов.Структура и макет структуры каталога Django Celery

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, полученные из сельдерея учебника (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:[email protected]: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 , заменяя «отчеты» на «учетную запись». Должен ли я иметь один файл сельдерея, который живет на том же уровне как manage.py? Любая помощь или предложения были бы весьма признательны.

+0

Принимается ответ @qwattash, потому что он доставил меня туда, куда я шел. Но действительно ли это стандарт? У меня есть системные и настройки «приложения» для каждого проекта, есть ли celery.py в одном из них? Похоже, это только вопрос предпочтения, но если есть определенный стандарт, я бы хотел его проследить. – scoopseven

ответ

1

Файл приложения сельдерея должен находиться в основной директории вашего проекта, по настройкам и всем остальным, как показано в документации, которую вы опубликовали.

Для определения переносных задач имеет смысл разместить их в приложении, которое использует их, как вы указали, в вашем случае приложение отчетов.

Идея состоит в том, что ваш файл задачи зарегистрирован любым приложением для сельдерея, определенным в проекте, а вашему приложению django не нужно знать, какое приложение для сельдерея регистрирует задачи. Вы делаете это, используя декоратор 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 

Надеется, что это помогает.

+1

Также обратите внимание, что вы помещаете celery.py в папку проекта второго уровня и называете ее «сельдерей - рабочий проект -l info», где проект относится к этой папке второго уровня. – scoopseven

0

Вам нужен только один файл сельдерея. Рекомендуется поместить его в основной каталог проекта или в ваши настройки, если файл __init__ находится в одной папке и имеет необходимые вызовы.

+0

Не могли бы вы рассказать об этом? Я попытался добавить его в /project/__init__.py, но в итоге всевозможные импортные ошибки. Учебник по сельдерину говорит, чтобы поставить его на /projects/reports/__init__.py (http://docs.celeryproject.org/en/latest/django/first-steps-with-django.html) – scoopseven

+0

Вероятно, это проблема с вашим потому что я использую его таким образом в нескольких приложениях, celery.py в моем «основном» приложении, которое также содержит мои настройки. Где ваши файлы manage.py/settings? – onyeka

+0

Или просто ваши файлы настроек, я вижу ваш manage.py, извините. – onyeka