0

我遇到了与此类似的问题: 发布新任务时 Celery Flower 中出现“未知任务”错误

但是我正在运行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

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

如果我用 send-task 替换 async-apply,我会得到 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 包。用花注册的正确方法是什么?

4

1 回答 1

2

看起来你没有将app参数传递给花。要开始花,你需要调用它

flower -A your_app

或者

celery flower -A your_app

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

于 2014-10-26T05:52:44.897 回答