Celery 无法使用 Django 2.1.1 找到任务或设置
Celery can not find tasks nor settings with Django 2.1.1
我正在尝试使用 Celery 和 RabbitMQ 服务器执行异步任务。我已经在我的系统上安装了 Celery
和 RabbitMQ
。现在,当我 运行 celery worker -l info
时,芹菜开始使用默认配置设置工作,忽略我的设置,并且它没有显示已注册的任务。我假设由于我的项目结构而出现问题。但是现在不可能改变它。谁能帮我弄清楚这里的问题是什么?
找不到任务,它从默认设置开始,忽略我的用户名和密码以及设置文件中提到的虚拟主机。
项目目录:
|--engine
| |--app
| | |--user
| | |--program
| | | |--__init__.py
| | | |--admin.py
| | | |--apps.py
| | | |--models.py
| | | |--tasks.py
| | | |--urls.py
| | | |--views.py
| | |--course
| |--config
| | |--settings
| | | |--__init.py
| | | |--default.py
| | | |--development.py
| | | |--production.py
| | |--__init__.py
| | |--celery.py
| | |--middleware.py
| | |--urls.py
| | |--wsgi.py
| |--.env
| |--manage.py
| |--requirements.txt
engine/config/celery.py
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.default')
app = Celery('config')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
engine/config/__init__.py
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ('celery_app',)
engine/app/program/tasks.py
from celery import shared_task
@shared_task()
def add(number1, number2):
print(number1 + number2)
engine/config/settings/default.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'corsheaders',
'django_filters',
'app.program',
'app.course',
'app.user',
]
CELERY_BROKER_URL = 'amqp://uname:pass@localhost:5672/vhost/'
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
到目前为止,我发现您的配置存在三个问题:
- 在设置文件中,您应该通过名称 BROKER_URL 而不是 CELERY_BROKER_URL.
指定代理 url
- tasks.py中指定的装饰器应该是@shared_task而不是@shared_task()
指定 celery 查找任务的路径。在 celery.py 文件中,更新
app.autodiscover_tasks()
和
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
实际问题出在 Windows。正如他们网站上提到的那样 -
Does Celery support Windows?
Answer: No.
Since Celery 4.x, Windows is no longer supported due to lack of resources.
But it may still work and we are happy to accept patches.
我正在尝试使用 Celery 和 RabbitMQ 服务器执行异步任务。我已经在我的系统上安装了 Celery
和 RabbitMQ
。现在,当我 运行 celery worker -l info
时,芹菜开始使用默认配置设置工作,忽略我的设置,并且它没有显示已注册的任务。我假设由于我的项目结构而出现问题。但是现在不可能改变它。谁能帮我弄清楚这里的问题是什么?
找不到任务,它从默认设置开始,忽略我的用户名和密码以及设置文件中提到的虚拟主机。
项目目录:
|--engine
| |--app
| | |--user
| | |--program
| | | |--__init__.py
| | | |--admin.py
| | | |--apps.py
| | | |--models.py
| | | |--tasks.py
| | | |--urls.py
| | | |--views.py
| | |--course
| |--config
| | |--settings
| | | |--__init.py
| | | |--default.py
| | | |--development.py
| | | |--production.py
| | |--__init__.py
| | |--celery.py
| | |--middleware.py
| | |--urls.py
| | |--wsgi.py
| |--.env
| |--manage.py
| |--requirements.txt
engine/config/celery.py
from __future__ import absolute_import, unicode_literals
import os
from celery import Celery
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.default')
app = Celery('config')
app.config_from_object('django.conf:settings', namespace='CELERY')
app.autodiscover_tasks()
@app.task(bind=True)
def debug_task(self):
print('Request: {0!r}'.format(self.request))
engine/config/__init__.py
from __future__ import absolute_import, unicode_literals
from .celery import app as celery_app
__all__ = ('celery_app',)
engine/app/program/tasks.py
from celery import shared_task
@shared_task()
def add(number1, number2):
print(number1 + number2)
engine/config/settings/default.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'corsheaders',
'django_filters',
'app.program',
'app.course',
'app.user',
]
CELERY_BROKER_URL = 'amqp://uname:pass@localhost:5672/vhost/'
LANGUAGE_CODE = 'en-us'
TIME_ZONE = 'UTC'
USE_I18N = True
USE_L10N = True
USE_TZ = True
到目前为止,我发现您的配置存在三个问题:
- 在设置文件中,您应该通过名称 BROKER_URL 而不是 CELERY_BROKER_URL. 指定代理 url
- tasks.py中指定的装饰器应该是@shared_task而不是@shared_task()
指定 celery 查找任务的路径。在 celery.py 文件中,更新
app.autodiscover_tasks()
和
app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
实际问题出在 Windows。正如他们网站上提到的那样 -
Does Celery support Windows?
Answer: No.
Since Celery 4.x, Windows is no longer supported due to lack of resources.
But it may still work and we are happy to accept patches.