如何从外部停止多线程Python脚本
我有一个用Python写的程序,它使用了多个守护线程。我想从外部停止这个程序,最好是通过另一个Python脚本来实现。
我试过在命令行用 kill <pid>
来结束它,但这对多线程的脚本不起作用。
一种方法是让程序每隔n秒检查一个文件,作为终止的标志。我相信还有更好的方法可以做到这一点。
需要注意的是,我希望能够干净地停止程序,所以从外部发送一个异常消息会是理想的选择。
编辑:
这是我目前实现的一个例子:
try:
open('myprog.lck', 'w').close()
while True:
time.sleep(1)
try:
open('myprog.lck').close()
except IOError:
raise KeyboardInterrupt
except KeyboardInterrupt:
print 'MyProgram terminated.'
删除文件 myprog.lck
会导致脚本停止。上面的例子这样做算不算不好呢?
3 个回答
0
我会按照这里的说明来安装一个信号处理器,具体可以参考这个链接:http://www.doughellmann.com/PyMOTW/signal/index.html#signals-and-threads
你可以在命令行中输入 kill -l
来查看可用的信号列表。
0
你可以在命令行中用 kill -9 <pid>
来强制结束它。
2
使用“毒丸”技术。当你的程序收到一个“毒丸”(也就是一个特殊的消息)时,它必须处理这个消息并结束运行。你现在的做法也可以,但如果想要更优雅一点,建议你在“终止脚本”和主程序之间实现一种通信方式。首先,可以看看标准库中的进程间通信和网络相关内容。