如何从外部停止多线程Python脚本

0 投票
3 回答
1004 浏览
提问于 2025-04-17 02:29

我有一个用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

使用“毒丸”技术。当你的程序收到一个“毒丸”(也就是一个特殊的消息)时,它必须处理这个消息并结束运行。你现在的做法也可以,但如果想要更优雅一点,建议你在“终止脚本”和主程序之间实现一种通信方式。首先,可以看看标准库中的进程间通信和网络相关内容。

撰写回答