Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/293.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python &引用;“芹菜停止”;它不起作用了_Python_Celery_Celeryd - Fatal编程技术网

Python &引用;“芹菜停止”;它不起作用了

Python &引用;“芹菜停止”;它不起作用了,python,celery,celeryd,Python,Celery,Celeryd,我以一种不同寻常的方式使用芹菜——我在芹菜启动时创建自定义进程,当芹菜运行时,这个进程应该一直运行。 芹菜工人将此流程用于他们的任务(不需要详细信息) 我从命令行运行芹菜,一切正常: celery -A celery_jobs.tasks.app worker -B --loglevel=warning 但是当我用西芹来监控西芹时,没有办法阻止它。 命令celeryd stop尝试停止芹菜,但从未停止 当我检查这两种情况下的进程树时,有一点不同——当从命令行运行时,父进程显然是芹菜进程(将芹菜

我以一种不同寻常的方式使用芹菜——我在芹菜启动时创建自定义进程,当芹菜运行时,这个进程应该一直运行。 芹菜工人将此流程用于他们的任务(不需要详细信息)

我从命令行运行芹菜,一切正常:

celery -A celery_jobs.tasks.app worker -B --loglevel=warning
但是当我用西芹来监控西芹时,没有办法阻止它。 命令
celeryd stop
尝试停止芹菜,但从未停止

当我检查这两种情况下的进程树时,有一点不同——当从命令行运行时,父进程显然是芹菜进程(将芹菜工作者作为子进程的主进程)。终止(停止)父芹菜进程将停止所有芹菜工人和我的自定义进程

但是当使用
celeryd
运行时,我的自定义进程有父进程
/sbin/init
——调用
celeryd stop
不起作用——似乎主芹菜进程正在等待什么,或者无法停止我的自定义进程,因为它不是芹菜的子进程


我对流程了解不多,也不容易找到信息,因为我不知道应该搜索什么,所以欢迎提供任何提示。

我也遇到过同样的问题。我需要一个快速的解决方案,所以我写了这个bash脚本

#/bin/bash

/etc/init.d/celeryd stop
sleep 10
export PIDS=`ps -ef | grep celery |grep -v 'grep' | awk '{print $2}'`
for PID in $PIDS; do kill -9 $PID; done;

如果进程在10秒后没有停止,那么停止候选进程需要很长时间,因此我决定突然停止

我假设您的自定义进程不是任何池工作进程的子进程,也不必如此

我用supervisord代替celeryd来监控工人。它还可以用于对其他进程进行后台监控。例如您的自定义进程

在您的情况下,supervisord.conf可以有多个部分。每个芹菜工作节点一个,自定义进程一个(或多个)


当您终止supervisord进程(使用-TERM)时,它将负责终止所有工作进程以及您的自定义进程。如果你使用术语,那么你需要确保你的自定义进程处理它们。

谢谢快速修复,如果我找不到其他解决方案会很有帮助。我接受这个答案,因为我认为这个解决方案更干净。