对于运行多个线程的python脚本,在keyboardinterrupt上退出的过程

时间:2014-07-15 15:45:15

标签: python exit

我有一个无限运行2个线程的脚本。 (每个线程都是无限循环)每当我正常运行它时,我使用ctrl + Z或ctrl + C来停止它的执行(取决于操作系统)。但是自从我将它添加到Linux中的/etc/rc.local文件后,为了在启动时自动启动,我无法使用这些命令强制退出。

这迫使我在python脚本本身中包含一些内容,以便在键入某个键时干净地退出。我该怎么做?

问题在于我运行的是多线程应用程序,它连续运行并且不等待任何用户输入。

我将此添加到我的线程中的循环开头 -

ip = raw_input()
if ip == 'quit':
    quit()

但这不起作用,因为它阻止用户输入,并停止脚本。我根本不希望脚本受到影响。我只想让它在我想要阻止它时作出回应。我的问题不是使用什么命令(这里解释 - Python exit commands - why so many and when should each be used?),而是我应该如何使用它而不影响我的程序流程。

2 个答案:

答案 0 :(得分:1)

保留处理KeyboardInterrupt的代码并向其发送INT信号以从shell中停止程序:kill -INT $pid,其中$pid是程序的进程ID(PID) 。这与在程序在前台运行的shell中按CTRL + C基本相同。

在程序启动之后立即将程序的PID写入文件,无论是从程序本身还是从异步启动它的代码,都可以更轻松地在以后发送信号,而无需搜索进程列表中的进程。

答案 1 :(得分:0)

一种方法是让线程检查全局变量作为其循环的一部分,并在设置变量时终止(break退出循环并终止,即)。

然后主线程可以在终止之前简单地设置变量和join()所有现有线程。您应该知道,如果各个线程被阻塞等待某些事件继续发生,从而检测到全局变量已经设置,那么它们可能会挂起,直到该事件发生。