如何停止 python 脚本
How to stop the python script
我正在尝试编写一个 python 脚本,该脚本还处理 killing/stopping 它自己的信号处理过程。
它 运行 每次一个文件,在特定时间休眠并再次 运行 直到它用文件完成整个目录。每个文件的处理时间约为 5 到 10 分钟,具体取决于大小。
但是,我希望我的程序在发出信号时停止。它不应该立即杀死它。它应该 运行 当前文件然后停止。
所以我不能使用 CTRL Z 因为它会立即挂起 pid。
stop = False
def handler(number, frame):
global stop
stop = True
signal.signal(signal.SIGUSR1, handler)
while not stop:
# Do things
以上是我尝试过的方法,但是当我发出信号时它会立即将其杀死。即使在完成对所有文件的处理后,它也会进入无限循环。
当我发出信号时如何停止进程,让它先完成当前文件的处理?
您可以创建命令侦听器线程。主线程仍然进行文件处理。例如,侦听器线程等待来自标准输入的命令。当您发送 "stop" 命令时,它会设置一个变量。文件处理器线程在处理文件之前检查变量。所以,它可以在你想停止处理的时候停止。
只需为 signal.SIGTERM 安装一个信号处理程序 - 并在其中设置程序中的状态变量,您在完成处理每个文件时检查该变量。
实际上很简单 - 请参阅文档:https://docs.python.org/2/library/signal.html .
import os
import signal
terminate = False
for filename in os.listdir("<your dir>"):
if terminate:
break
process_next_file(filename)
def handler(signum, frame):
global terminate
print("Termination requested")
terminate = True
signal.signal(signal.SIGTERM, handler)
(此外,您还可以使用其他信号 - 例如,SIGINT 是用户按下 ctrl+C 时使用的信号)
我正在尝试编写一个 python 脚本,该脚本还处理 killing/stopping 它自己的信号处理过程。
它 运行 每次一个文件,在特定时间休眠并再次 运行 直到它用文件完成整个目录。每个文件的处理时间约为 5 到 10 分钟,具体取决于大小。
但是,我希望我的程序在发出信号时停止。它不应该立即杀死它。它应该 运行 当前文件然后停止。
所以我不能使用 CTRL Z 因为它会立即挂起 pid。
stop = False
def handler(number, frame):
global stop
stop = True
signal.signal(signal.SIGUSR1, handler)
while not stop:
# Do things
以上是我尝试过的方法,但是当我发出信号时它会立即将其杀死。即使在完成对所有文件的处理后,它也会进入无限循环。
当我发出信号时如何停止进程,让它先完成当前文件的处理?
您可以创建命令侦听器线程。主线程仍然进行文件处理。例如,侦听器线程等待来自标准输入的命令。当您发送 "stop" 命令时,它会设置一个变量。文件处理器线程在处理文件之前检查变量。所以,它可以在你想停止处理的时候停止。
只需为 signal.SIGTERM 安装一个信号处理程序 - 并在其中设置程序中的状态变量,您在完成处理每个文件时检查该变量。
实际上很简单 - 请参阅文档:https://docs.python.org/2/library/signal.html .
import os
import signal
terminate = False
for filename in os.listdir("<your dir>"):
if terminate:
break
process_next_file(filename)
def handler(signum, frame):
global terminate
print("Termination requested")
terminate = True
signal.signal(signal.SIGTERM, handler)
(此外,您还可以使用其他信号 - 例如,SIGINT 是用户按下 ctrl+C 时使用的信号)