【问题标题】:Celery works, but with flower doesn't work芹菜有效,但花无效
【发布时间】:2016-03-18 18:07:04
【问题描述】:

我已经安装了 celery 和 RabitMQ 和flower。我可以浏览到花港。我有以下简单的工作人员,我可以将其附加到 celery 并从 python 程序调用:

# -*- coding: utf-8 -*-
"""
Created on Sat Dec 12 16:37:33 2015

@author: idf
"""

from celery import Celery

app = Celery('tasks', broker='amqp://guest@localhost//')

@app.task
def add(x, y):
    return x + y 

这个程序调用它

# -*- coding: utf-8 -*-
"""
Created on Sat Dec 12 16:40:16 2015

@author: idf
"""

from tasks import add

add.delay(36, 5)   

我是这样开始芹菜的:

idf@DellInsp:~/Documents/Projects/python3$ celery -A tasks worker --loglevel=info
    [2015-12-12 19:22:46,223: WARNING/MainProcess] /home/idf/anaconda3/lib/python3.5/site-packages/celery/apps/worker.py:161: CDeprecationWarning: 
    Starting from version 3.2 Celery will refuse to accept pickle by default.

    The pickle serializer is a security concern as it may give attackers
    the ability to execute any command.  It's important to secure
    your broker from unauthorized access when using pickle, so we think
    that enabling pickle should require a deliberate action and not be
    the default choice.

    If you depend on pickle then you should set a setting to disable this
    warning and to be sure that everything will continue working
    when you upgrade to Celery 3.2::

        CELERY_ACCEPT_CONTENT = ['pickle', 'json', 'msgpack', 'yaml']

    You must only enable the serializers that you will actually use.


      warnings.warn(CDeprecationWarning(W_PICKLE_DEPRECATED))

     -------------- celery@DellInsp v3.1.19 (Cipater)
    ---- **** ----- 
    --- * ***  * -- Linux-3.19.0-39-lowlatency-x86_64-with-debian-jessie-sid
    -- * - **** --- 
    - ** ---------- [config]
    - ** ---------- .> app:         tasks:0x7f61485e61d0
    - ** ---------- .> transport:   amqp://guest:**@localhost:5672//
    - ** ---------- .> results:     disabled
    - *** --- * --- .> concurrency: 4 (prefork)
    -- ******* ---- 
    --- ***** ----- [queues]
     -------------- .> celery           exchange=celery(direct) key=celery


    [tasks]
      . tasks.add

    [2015-12-12 19:22:46,250: INFO/MainProcess] Connected to amqp://guest:**@127.0.0.1:5672//
    [2015-12-12 19:22:46,267: INFO/MainProcess] mingle: searching for neighbors
    [2015-12-12 19:22:47,275: INFO/MainProcess] mingle: all alone
    [2015-12-12 19:22:47,286: WARNING/MainProcess] celery@DellInsp ready.
    [2015-12-12 19:22:47,288: INFO/MainProcess] Received task: tasks.add[3c0e5317-ac53-465e-a8fd-3e2861e31db6]
    [2015-12-12 19:22:47,289: INFO/MainProcess] Task tasks.add[3c0e5317-ac53-465e-a8fd-3e2861e31db6] succeeded in 0.00045899399992777035s: 41

^C
worker: Hitting Ctrl+C again will terminate all running tasks!

worker: Warm shutdown (MainProcess)

注意41的正确输出

但是,如果我传入flower 参数,则执行调用时不会发生任何事情。我也没有在flower 网站上看到任何任务。

idf@DellInsp:~/Documents/Projects/python3$ celery flower -A tasks worker --loglevel=info
[I 151212 19:23:59 command:113] Visit me at http://localhost:5555
[I 151212 19:23:59 command:115] Broker: amqp://guest:**@localhost:5672//
[I 151212 19:23:59 command:118] Registered tasks: 
    ['celery.backend_cleanup',
     'celery.chain',
     'celery.chord',
     'celery.chord_unlock',
     'celery.chunks',
     'celery.group',
     'celery.map',
     'celery.starmap',
     'tasks.add']
[I 151212 19:23:59 mixins:231] Connected to amqp://guest:**@127.0.0.1:5672//
[W 151212 19:24:01 control:44] 'stats' inspect method failed
[W 151212 19:24:01 control:44] 'active_queues' inspect method failed
[W 151212 19:24:01 control:44] 'registered' inspect method failed
[W 151212 19:24:01 control:44] 'scheduled' inspect method failed
[W 151212 19:24:01 control:44] 'active' inspect method failed
[W 151212 19:24:01 control:44] 'reserved' inspect method failed
[W 151212 19:24:01 control:44] 'revoked' inspect method failed
[W 151212 19:24:01 control:44] 'conf' inspect method failed
^Cidf@DellInsp:~/Documents/Projects/python3$ 

最后,不确定是不是报错,但是我的鲜花网站没有工人Tab。

【问题讨论】:

    标签: celery amqp flower


    【解决方案1】:

    我不确定我是否理解,但你是同时运行花和工人吗? Flower 不处理任务。你必须同时运行,然后Flower可以用作监控工具。

    运行芹菜:

    celery -A tasks worker --loglevel=info
    

    打开另一个shell并运行flower:

    celery -A tasks flower --loglevel=info
    

    然后去http://localhost:5555 看看你的工人。当然,如果你想看到一些东西,你必须运行一些任务。

    【讨论】:

    • 那么像上面这样运行flower来监控一个简单的worker的命令行是什么?
    • 这个序列似乎有效。当我请求 add 方法时,我什至看到它在更新。谢谢!奇怪,因为 janr 的建议似乎应该根据文档工作。
    • 哪些文件?我找不到这样的语法。在花官方文档中,它建议通过自己的命令“花”作为单独的进程运行它,或者像我建议的那样简单地通过 celery。
    • 他在下面的回复中链接到文档。这就是我最初尝试过的,但无法让它以这种方式工作。
    • 奇怪,为什么文档中没有描述!我在想我只需要启动一个:要么工人要么花!
    猜你喜欢
    • 2014-02-07
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-08
    • 2012-05-08
    • 2017-03-15
    • 2014-10-30
    相关资源
    最近更新 更多