检查我的所有工人是不是都在 celery 中在线

Posted

技术标签:

【中文标题】检查我的所有工人是不是都在 celery 中在线【英文标题】:Check if all my workers are online in celery检查我的所有工人是否都在 celery 中在线 【发布时间】:2016-01-15 10:41:00 【问题描述】:

我有两个工人在运行:

    celery -A project worker -Q OneAtTimeQueue -c1 -l Info

    celery -A project worker -B -l info

第一个用于使任务一次执行一个。这就是为什么它有一个并发。

第二个是用于其他任务,不需要每次都是一个,它是周期性任务的节拍。

当我使用时:

celery -A project status

它只显示:

celery@project: OK

1 node online.

如何查看两个worker是否在线?

【问题讨论】:

【参考方案1】:

首先,要启动工作节点而不用 -n 指定名称,您很可能会收到类似这样的 DuplicateNodenameWarning 警告:

/usr/local/lib/python3.4/site-packages/celery/app/control.py:36:DuplicateNodenameWarning:收到来自节点名称的多个回复:celery@hostname。

其次,您可以使用 Celery 远程命令 Ping 来检查所有在线工作人员(因为他们会回复 pong),Ping 命令将向所有 Celery 工作人员节点广播 ping 并仅报告活动的工作节点,IE

$ celery -A project inspect ping
celery@hostname: OK
        pong
celery@hostname: OK
        pong
/usr/local/lib/python3.4/site-packages/celery/app/control.py:36: DuplicateNodenameWarning: Received multiple replies from node name: celery@hostname.
Please make sure you give each node a unique nodename using the `-n` option.
  pluralize(len(dupes), 'name'), ', '.join(sorted(dupes)),

【讨论】:

Devy,我也收到了duplicatenodename 警告。您能否阐明这是否会在任务执行中产生任何错误?还是可以忽略不计? @HassanBaig DuplicateNodenameWarning 是警告而不是致命错误,因此工作人员将继续运行。但是,我更愿意修复它们。基本上,使用-n 来指定节点名称,这样它们就不会全部默认为相同的名称,正如错误消息中所指出的那样。 嗯,我正在使用主管来处理芹菜工人。我在 celery.conf 文件中定义了process_name=%(program_name)s_%(process_num)02dnumprocs=5。根据supervisorctl,进程确实有不同的名称。但是它们都在同一个芹菜“节点”下吗?是这样的吗?【参考方案2】:

Celery Workers Guide 建议在单个主机上运行多个工作程序时使用唯一名称。尝试添加-n参数然后运行状态:

celery -A project worker -Q OneAtTimeQueue -c1 -l Info -n worker1
celery -A project worker -B -l info -n worker2
celery -A project status

【讨论】:

【参考方案3】:

嗯,我认为最好是使用:

ps aux | grep celery

然后我可以查看两个进程是否都在运行。

【讨论】:

这只会显示与您运行它的机器相关的信息。 celery 的一个常见场景是让工作人员在远程节点上运行。

以上是关于检查我的所有工人是不是都在 celery 中在线的主要内容,如果未能解决你的问题,请参考以下文章

如何检查处理 Celery 任务的队列

在没有工人的情况下运行 celery 任务

Celery:如何用不同的工人区分不同的环境?

Django 1.6 + RabbitMQ 3.2.3 + Celery 3.1.9 - 为啥我的芹菜工人死于:WorkerLostError:工人过早退出:信号11(SIGSEGV)

Heroku/Celery:一名工人同时执行任务?

VSCode调试芹菜工人