运行多个线程的python脚本在键盘中断时退出的程序

问题描述 投票:0回答:2

我有一个脚本,它可以无限运行2个线程。 (每个线程都是一个无限的while循环)只要正常运行,我都会使用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?),而是在不影响程序流程的情况下应如何使用它。

python exit
2个回答
1
投票

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

在程序启动后立即从程序本身内部或从异步启动的代码将程序的PID写入文件,这使得以后发送信号更加容易,而无需在进程列表中搜索该进程。


1
投票

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

然后,主线程可以在终止之前简单地设置变量并join()所有现有线程。您应该意识到,如果各个线程在下次检查是否设置了全局变量之前被阻塞,等待某个事件发生,那么它们将一直挂起,直到该事件发生为止。

© www.soinside.com 2019 - 2024. All rights reserved.