Django 1.9 + Celery 未注册任务
Posted
技术标签:
【中文标题】Django 1.9 + Celery 未注册任务【英文标题】:Django 1.9 + Celery unregistered tasks 【发布时间】:2016-11-27 08:45:24 【问题描述】:此配置正确。我开始吃芹菜 错误的方式:(,没有指定项目名称。(芹菜工人-A hockey_manager -l 信息
我确实从 1.6.5 升级到 Django 1.9,但无法使 celery 配置再次工作。
在寻找解决方案将近两天后,我没有发现任何可行的方法。
Celery 没有检测到我的任务。我试过了:
CELERY_IMPORTS 自动发现任务 绑定=真依赖关系
amqp==2.0.3
celery==3.1.23
Django==1.9.8
django-celery==3.1.17
kombu==3.0.35
项目结构
hockey_manager/__init__.py
from __future__ import absolute_import
# This will make sure the app is always imported when
# Django starts so that shared_task will use this app.
from .celery import app as celery_app
hockey_manager/celery.py
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', 'hockey_manager.settings.common')
app = Celery('hockey_manager')
# Using a string here means the worker will not have to
# pickle the object when using Windows.
app.config_from_object('django.conf:settings')
# load task modules from all registered Django app configs.
app.autodiscover_tasks(['hockey'])
# 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)
# Celery backend configs
app.conf.update(
CELERY_RESULT_BACKEND='djcelery.backends.database:DatabaseBackend',
)
if __name__ == '__main__':
app.start()
@app.task(bind=True)
def debug_task(self):
print('Request: 0!r'.format(self.request))
hockey_manager/settings/common.py
INSTALLED_APPS = [
...
'hockey',
'djcelery',
'kombu.transport.django',
...
]
##
# Celery
##
# BROKER_POOL_LIMIT = 3
BROKER_URL = os.environ.get('CLOUDAMQP_URL')
#BROKER_URL = 'django://'
# List of modules to import when celery starts.
CELERY_IMPORTS = ('hockey.tasks', )
#: Only add pickle to this list if your broker is secured
#: from unwanted access (see userguide/security.html)
CELERY_ACCEPT_CONTENT = ['json']
CELERY_TASK_SERIALIZER = 'json'
CELERY_RESULT_SERIALIZER = 'json'
曲棍球/tasks.py
from __future__ import absolute_import
from hockey_manager.celery import app
@app.task(name='hockey.tasks.league_schedule_results')
def league_schedule_results(schedule, statistics):
...
Celery 出错
[2016-07-23 17:05:46,231: ERROR/MainProcess] 收到未注册 'hockey.tasks.league_schedule_results' 类型的任务。 该消息已被忽略并丢弃。
从 2.0 版开始,我还收到了来自 amqp 的弃用警告:
AMQPDeprecationWarning:连接上的 .transport 属性是 之前访问过 连接已建立。目前支持此功能,但将 在 amqp 2.2.0 中被弃用。
Since amqp 2.0 you have to explicitly call Connection.connect() before using the connection. W_FORCE_CONNECT.format(attr=attr)))
【问题讨论】:
【参考方案1】:使用django-celery
模块。
这里是link 示例如何在 django 1.9.1+ 中使用django-celery
【讨论】:
我已经在使用它了。它显示在我的依赖项列表中。版本 3.1.17 我在 django 1.9.1 中使用它,我不需要 celery.py 文件进行配置。我只是给你建议尝试链接中提到的步骤。可能按照这些步骤,您将使用 django 1.9.1 正确配置 celery 我会试一试,让你知道。谢谢 我不知道为什么,但它有效:D。感谢您的提示;)很高兴知道其中的原因。 ***.com/questions/8920643/…以上是关于Django 1.9 + Celery 未注册任务的主要内容,如果未能解决你的问题,请参考以下文章
Django 1.9 + celery + django-celry 实现定时任务
celery - 尽管已注册,但任务未运行。芹菜控制台不反映任务的接收