【问题标题】:Unknown task error in Celery 3.1.6 with flower 0.7.3带有花 0.7.3 的 Celery 3.1.6 中的未知任务错误
【发布时间】:2014-12-21 13:11:46
【问题描述】:

我遇到了与此类似的问题: "Unknown task" error in Celery Flower when posting a new task

但是,我正在运行 Flower 0.7.3,它已经具有上一期提到的修复程序。当我加载花时,我看到以下内容:

[D 141025 19:22:44 state:87] 注册:{'celery@myhost': ['crossbar.tasks.add.add', 'crossbar.tasks.ping.ping', 'crossbar.tasks.send_email.send_email', 'crossbar.tasks.send_message.send_message', 'crossbar.tasks.send_sms.send_sms']} [D 141025 19:22:49 events:116] 启用事件 [D 141025 19:22:50 state:153] 恢复检查工人... [I 141025 19:22:50 tasks:99] 使用“[1, 2]”和“{}”调用任务“crossbar.tasks.add.add” [W 141025 19:22:50 web:1404] 404 POST /api/task/async-apply/crossbar.tasks.add.add (127.0.0.1):未知任务'crossbar.tasks.add.add' [W 141025 19:22:50 web:1811] 404 POST /api/task/async-apply/crossbar.tasks.add.add (127.0.0.1) 1.11ms

但是你可以看到 POST 失败,我试图发布如下:

curl -X POST -d '{"args":[1,2]}' http://myhost:15629/api/task/async-apply/crossbar.tasks.add.add

这是我运行 Celery 的方式: celery -A myapp worker --loglevel=info

我正在一个单独的进程上运行花,如下所示: 花 --conf=src/crossbar/flowerconfig.py

如果我将 async-apply 替换为 send-task,我会得到 200,但在 celery 控制台上会出现以下错误:

[2014-10-26 17:03:06,640: CRITICAL/MainProcess] 无法解码消息正文:ContentDisallowed('拒绝反序列化类型为 pickle (application/x-python-serialize)'的不受信任的内容',) [type:' application/x-python-serialize' encoding:'binary' headers:{}] 正文:'\x80\x02}q\x01(U\x07expiresq\x02NU\x03utcq\x03\x88U\x04argsq\x04]q\x05(K\x01K\x02eU\x05chordq\x06NU\tcallbacksq\x07NU\x08errbacksq\x08NU\ x07tasksetq\tNU\x02idq\nU$f1e8fc87-d0ee-4fc6-86cb-8edded4a4f4cq\x0bU\x07retriesq\x0cK\x00U\x04taskq\rX\x16\x00\x00\x00crossbar.tasks.add.addq\x0eU\ttimelimitq\x0fNN\ x86q\x10U\x03etaq\x11NU\x06kwargsq\x12}q\x13u.' (229b) 回溯(最近一次通话最后): _receive_callback 中的文件“/Users/psantann/Documents/git/crossbar-taskmgr_trunk/.tox/crossbar-taskmgr/lib/python2.6/site-packages/kombu/messaging.py”,第 586 行 解码 = 无 if on_m else message.decode() 解码中的文件“/Users/psantann/Documents/git/crossbar-taskmgr_trunk/.tox/crossbar-taskmgr/lib/python2.6/site-packages/kombu/message.py”,第 142 行 self.content_encoding, 接受=self.accept) 文件“/Users/psantann/Documents/git/crossbar-taskmgr_trunk/.tox/crossbar-taskmgr/lib/python2.6/site-packages/kombu/serialization.py”,第 174 行,加载中 raise self._for_untrusted_content(content_type, 'untrusted') ContentDisallowed:拒绝反序列化 pickle 类型的不受信任的内容 (application/x-python-serialize)

好的,如果我将“pickle”添加到接受的内容列表中,我不会再收到序列化错误。但是花仍然不知道我的任务,因此异步应用不起作用。我无法让花 -A 应用程序为我工作,因为我不是通过 celery 应用程序初始化它,而是使用flowerconfig.py,在flowerconfig.py 中我有 CELERY_IMPORTS 设置,但实际任务来自不同的 python 包。用花注册的正确方法是什么?

【问题讨论】:

  • 我通过在接受内容列表中添加“pickle”解决了“不允许”问题(是的,我知道这被认为是一个安全问题,但直到我想出如何以不同的方式对花进行序列化就足够了),所以现在看来​​我唯一的问题是让 async-apply 工作。
  • 您是否将CELERY_TASK_SERIALIZER、CELERY_RESULT_SERIALIZER 设置为'json'?
  • 是的,我做到了,但看起来我从花中得到的东西需要“泡菜”(见我上面的评论)。我现在的问题似乎与花(不是芹菜)没有注册我的任务有关。我尝试使用花 -A 但我在花应用程序中没有芹菜入口点。我希望我可以做一些与flowerconfig.py 等效的事情

标签: python post celery flower


【解决方案1】:

看起来您没有将 app 参数传递给花。要启动花,您需要使用

调用它
flower -A your_app

celery flower -A your_app

如果您不传递 app 参数,则会引发 404 错误。

【讨论】:

  • 我正在使用一种稍微不同的机制来注册我的任务。另一个进程运行 celery -A my_app 并使用 celery 注册任务。当我运行花命令时,它似乎可以访问这些任务,因为它们显示在上面的输出中。
  • 在描述中添加了有关我如何运行 cmds 的更多详细信息
  • 当我正确导入我的任务后,这个解决方案实际上可以工作,谢谢 Chillar
猜你喜欢
  • 1970-01-01
  • 2018-06-03
  • 1970-01-01
  • 1970-01-01
  • 2015-12-01
  • 1970-01-01
  • 2021-02-26
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多