Почему он не может найти мой файл конфигурации сельдерея?

/home/myuser/mysite-env/lib/python2.6/site-packages/celery/loaders/default.py:53: NotConfigured: модуль celeryconfig.py не найден! Убедитесь, что он существует и доступен для Python.
NotConfigured)

Я даже определил это в моем /etc/profile, а также в моей виртуальной среде «активировать». Но не читает.


person TIMEX    schedule 21.01.2011    source источник
comment
Глупый вопрос... (потому что я сделал это), когда выполняется python, работает ли правильная версия. Я работал на системах с двумя версиями Python... не спрашивайте.   -  person John Giotta    schedule 21.01.2011


Ответы (4)


Теперь в Celery 4.1 вы можете решить эту проблему с помощью этого кода (самый простой способ):

import celeryconfig

from celery import Celery

app = Celery()
app.config_from_object(celeryconfig)

Например, небольшой celeryconfig.py:

BROKER_URL = 'pyamqp://'
CELERY_RESULT_BACKEND = 'redis://localhost'
CELERY_ROUTES = {'task_name': {'queue': 'queue_name_for_task'}}

Также очень простой способ:

from celery import Celery

app = Celery('tasks')

app.conf.update(
    result_expires=60,
    task_acks_late=True,
    broker_url='pyamqp://',
    result_backend='redis://localhost'
)

Или с помощью класса/объекта конфигурации:

from celery import Celery

app = Celery()

class Config:
    enable_utc = True
    timezone = 'Europe/London'

app.config_from_object(Config)
# or using the fully qualified name of the object:
#   app.config_from_object('module:Config')

Или как упоминалось при установке CELERY_CONFIG_MODULE

import os
from celery import Celery

#: Set default configuration module name
os.environ.setdefault('CELERY_CONFIG_MODULE', 'celeryconfig')

app = Celery()
app.config_from_envvar('CELERY_CONFIG_MODULE')

См. также:

person Sergey Luchko    schedule 27.11.2016
comment
Как это сделать, когда у вас есть только имя файла? /путь/к/имя_файла.py - person 010110110101; 15.12.2016
comment
@010110110101 Кажется, вам подходит первый вариант. Смотрите в ответе, я добавил некоторые пояснения к первому варианту. Если непонятно, готов помочь. - person Sergey Luchko; 15.12.2016
comment
Чтобы сделать это еще проще, вызовы config_from_object можно опустить, настроив конфигурацию непосредственно на Celery() с помощью аргумента ключевого слова config_source, т.е. app = Celery(config_source=celeryconfig) - person Vikas Prasad; 13.08.2018

У меня была аналогичная проблема с моим модулем задач. Простой

# celery config is in a non-standard location
import os
os.environ['CELERY_CONFIG_MODULE'] = 'mypackage.celeryconfig'

в моем пакете __init__.py решил эту проблему.

person Sebastian    schedule 07.08.2011
comment
Как рекомендовано в рекомендациях Celery для Django, os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings') в файле конфигурации celery перед вызовом app = Celery('tasks') должно работать хорошо, особенно если вы хотите позже динамически обновить файл настроек. - person Nick Merrill; 20.06.2014

Убедитесь, что у вас есть celeryconfig.py в том же месте, где вы запускаете celeryd, или иным образом убедитесь, что он доступен на пути Python.

person harry    schedule 04.04.2011

вы можете обойти это с помощью среды... или использовать --config: для этого требуется

  1. путь относительно CELERY_CHDIR из /etc/defaults/celeryd
  2. имя модуля Python, а не имя файла.

Сообщение об ошибке, вероятно, могло бы использовать эти два факта.

person fastmultiplication    schedule 21.12.2011