我有一个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'
我做错了什么?我可以如何正确地将设置变量调用到异步任务?
提前致谢!
答案 0 :(得分:0)
您似乎没有从Django设置加载 dev.py 文件。您的芹菜应用程序和任务代码看起来确实正确。如果您在加载 dev.py 时可以在设置中粘贴该位,这将对您有所帮助。