【问题标题】:"Unknown task" error in Celery Flower when posting a new task发布新任务时 Celery Flower 出现“未知任务”错误
【发布时间】:2014-04-23 10:21:18
【问题描述】:

我正在运行 celery 3.1.11 和flower 0.6.0 。

我有一个这样配置的 celery 应用程序;

# myapp.tasks.celery.py
from __future__ import absolute_import    

from celery import Celery


class Config(object):
    BROKER_URL = 'amqp://'
    CELERY_RESULT_BACKEND = 'amqp'

    CELERY_TASK_RESULT_EXPIRES = None
    CELERY_RESULT_SERIALIZER = 'json'
    CELERY_INCLUDE = [
        'myapp.tasks.source',
        'myapp.tasks.page',
        'myapp.tasks.diffusion',
        'myapp.tasks.place',
    ]
)

celery = Celery('myapp')
celery.config_from_object(Config)    


if __name__ == '__main__':
    celery.start()

我使用以下命令执行 celery worker:

$ celery -A myapp.tasks worker --loglevel=INFO -E -Q celery

我可以在工作器输出中看到可用任务的完整列表。

[tasks]
  ...    
  . myapp.tasks.diffusion.post_activity
  ...

然后我使用以下命令执行花服务器:

$ celery -A myapp.tasks flower

现在,每当我尝试通过 Flower REST API 发布新任务时,都会收到 404 错误,并显示错误消息“未知任务 TASK_NAME”。

[W 140423 12:16:17 web:1302] 404 POST /api/task/async-apply/myapp.tasks.diffusion.post_activity (82.225.61.194): Unknown task 'myapp.tasks.diffusion.post_activity'
[W 140423 12:16:17 web:1728] 404 POST /api/task/async-apply/myapp.tasks.diffusion.post_activity (82.225.61.194) 4.68ms

我在花 API 处理程序中放置了一个 pdb 断点,似乎在处理请求时唯一可用的任务如下:

ipdb> pp celery.tasks
{'celery.backend_cleanup': <@task: celery.backend_cleanup of yoda.tasks.celery:0x7fb9191eb490>,
 'celery.chain': <@task: celery.chain of yoda.tasks.celery:0x7fb9191eb490>,
 'celery.chord': <@task: celery.chord of yoda.tasks.celery:0x7fb9191eb490>,
 'celery.chord_unlock': <@task: celery.chord_unlock of yoda.tasks.celery:0x7fb9191eb490>,
 'celery.chunks': <@task: celery.chunks of yoda.tasks.celery:0x7fb9191eb490>,
 'celery.group': <@task: celery.group of yoda.tasks.celery:0x7fb9191eb490>,
 'celery.map': <@task: celery.map of yoda.tasks.celery:0x7fb9191eb490>,
 'celery.starmap': <@task: celery.starmap of yoda.tasks.celery:0x7fb9191eb490>}

似乎没有可用的任务。但是,当我在 shell 中使用任务 async_apply() 方法时,该任务由工作人员执行。

知道我做错了什么吗?谢谢!

编辑:当我使用 celery 3.0.19 和flower 0.5.0 时,它似乎可以正常工作。

【问题讨论】:

  • 我闻起来像 PYTHPONPATH 路径。包含您的任务的模块在哪里?当您运行 shell 并执行async_apply 时,您是从源目录运行吗?花服务器可能正在使用不同的 PYTHONPATH 运行。
  • 我从同一个目录运行worker和flower server,这是我的包根目录。 shell 也在同一个目录中运行。
  • 你能用pdb比较你的shell和花服务器之间的sys.path吗?也许检查它们是否不同?
  • 唯一不同的元素是'',shell 当前目录。我试图将它插入到花服务器路径中,位置为 0,但没有效果。

标签: python celery flower


【解决方案1】:

这个错误是由 Flower 中的一个错误引起的,现在已经解决了:

问题:https://github.com/mher/flower/issues/200

解决提交:https://github.com/mher/flower/commit/bfba1eec90124c92586c480aebaf98ae63c31276

【讨论】:

    【解决方案2】:

    我在使用flower 时遇到了类似的问题。我的配置是使用redis。

    在我开始使用选项“经纪人”的明确价值时情况有所改善(不要问我为什么)。

    在你的情况下我会尝试

    $ flower -r "amqp://"
    

    无论如何,我还要确保您从可以正确访问所有库的环境中启动 celeryredis

    【讨论】:

    • 我试过你的想法,但我仍然得到完全相同的错误。我确认切换回花 0.5.0 有效。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-22
    • 2022-06-15
    • 2014-12-21
    • 1970-01-01
    • 1970-01-01
    • 2018-01-30
    • 2018-04-13
    相关资源
    最近更新 更多