检查我的所有工人是不是都在 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)02d
和numprocs=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 中在线的主要内容,如果未能解决你的问题,请参考以下文章
Django 1.6 + RabbitMQ 3.2.3 + Celery 3.1.9 - 为啥我的芹菜工人死于:WorkerLostError:工人过早退出:信号11(SIGSEGV)