Django celery 未注册任务 |相对进口

Django celery unregistered task | relative imports

我正在尝试使用 celery (v 4.3.0) 在 django 应用程序中执行周期性任务。我的 tasks.py 如下所示:

# forepy is the simple package created by me
from forepy import Instrument
from forepy import oanda_api
from celery import shared_task

@shared_task
def sum_numbers(a, b):
    return a + b

问题是 celery worker returns 错误 Received unregistered task of type 'fxsignal.tasks.sum_number'。我认为问题的原因是 tasks.py 顶部的两个导入语句(forepy 导入)。当我注释掉这两行时,我的周期性任务 sum_numbers 正常工作。 forepy包的结构如下:

供您参考
forepy\
    downloaders\
        __init.py__
        oanda_api.py
    __init__.py
    instruments.py
    utils.py

forepyinit.py:

# -*- coding: utf-8 -*-

"""Top-level package for forepy."""

__author__ = """Elgin Jahangirov"""
__email__ = 'cahangirove@gmail.com'
__version__ = '0.2.0'


from forepy.instrument import Instrument
from forepy.downloaders import oanda_api

__all__ = ['Instrument', 'oanda_api']

我已经阅读了 celery 文档的 this 部分,并删除了我的 forepy 包中的所有 . 导入,但问题仍然存在。我还能做些什么来解决这个问题?

您需要更新导入,以便:

from forepy import instruments
from forepy.downloaders import oanda_api
from celery import shared_task

@shared_task
def sum_numbers(a, b):
    return a + b

您还需要在 settings.py 文件中告知 celery 关于您的其他 django 应用程序模块(在您的情况下为 forepy 模块),这样:

CELERY_IMPORTS = (
    'your_app.tasks',
    'forepy.instruments',
    'forepy.downloaders',
)

Celery 在这种情况下默默地失败了,尽管当前环境中没有安装另一个包的依赖项(forepy 的依赖项)。我只能在 django 项目的 settings.py 中添加以下配置后检测到(感谢 @cagrias):

CELERY_IMPORTS = (
    'your_app.tasks',
    'forepy.instrument',
    'forepy.downloaders',
)

在django设置中加入以上配置,终端报导入错误,实际是没有注册任务的原因。