在Celery任务运行时调用settings.py变量

时间:2017-08-04 15:50:20

标签: python django rabbitmq celery

我有一个Django应用程序,需要添加一个Celery异步任务。我想在任务中调用dev.py中的设置变量,例如MY_VARIABLE =' test'。为简化示例,我们假设有我的任务:

from django.conf import settings

@shared_task
def test_task():
    return settings.MY_VARIABLE

我的celery.py看起来像

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'proj.settings.dev')

app = Celery('proj')

app.config_from_object('django.conf:settings', namespace='CELERY')

app.autodiscover_tasks()

dev.py看起来像

CELERY_BROKER_URL = 'amqp://guest:guest@localhost:5672//'
CELERY_RESULT_BACKEND = 'django-db'
# CELERY_RESULT_BACKEND = 'db+postgresql+psycopg2://postgres:mypass@myhost/postgres'

CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
MY_VARIABLE='test'

通过

运行Celery工作人员
export DJANGO_SETTINGS_MODULE=proj.settings.dev
celery -A proj worker -l info

在调用者中我运行

res = test_task.delay(*args)

在芹菜终端的响应中我收到了AttributeError。

'Settings' object has no attribute 'MY_VARIABLE'

我做错了什么?我可以如何正确地将设置变量调用到异步任务?

提前致谢!

1 个答案:

答案 0 :(得分:0)

您似乎没有从Django设置加载 dev.py 文件。您的芹菜应用程序和任务代码看起来确实正确。如果您在加载 dev.py 时可以在设置中粘贴该位,这将对您有所帮助。