Django芹菜未注册任务|相对进口

2024-10-03 23:20:08 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试在django应用程序中使用celeri(v4.3.0)实现周期性任务。我的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返回错误Received unregistered task of type 'fxsignal.tasks.sum_number'。我认为问题的原因是tasks.py(forepy imports)顶部的两个import语句。当我注释掉这两行代码时,我的周期性任务sum_numbers工作正常。供您参考,forepy包的结构如下:

^{pr2}$

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包中的所有.导入,但问题仍然存在。我能做些什么来进一步解决这个问题?在


Tags: frompyimportapipackagetasktaskscelery
2条回答

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

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

通过将上述配置添加到django设置中,终端报告了导入错误,这是未注册任务的实际原因。在

您需要更新导入,以便:

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文件中的其他django应用程序模块(在您的例子中是forepy模块)通知celery,以便:

^{pr2}$

相关问题 更多 >