如何停止python脚本

2024-06-25 23:20:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试编写一个python脚本,该脚本还处理终止/停止自身进程的信号。在

它一次运行一个文件,在特定的时间休眠,然后再次运行,直到它用文件完成整个目录。根据文件大小,每个文件的处理时间大约为5到10分钟。在

但是,我希望我的程序在我发出信号时停止。它不应该立刻杀死它。它应该运行当前文件,然后停止。在

所以我不能使用CTRLZ,因为它会立即挂起pid。在

stop = False
def handler(number, frame):
    global stop
    stop = True
signal.signal(signal.SIGUSR1, handler)
while not stop:
    # Do things

上面是我试过的,但当我发信号时,它会立刻杀死它。而且,即使在处理完所有文件之后,它也会进入一个无限循环。在

当我发出信号,允许进程首先完成当前文件的处理时,我可以做些什么来停止进程?在


Tags: 文件程序目录脚本falsesignal信号进程
2条回答

你可以创建一个线程。主线程仍然执行文件处理。例如,侦听器线程等待来自标准输入的命令。当你发送“停止”命令时,它设置一个变量。文件处理器线程在处理文件之前检查变量。所以,当您想停止处理时,它可以停止。在

只需安装一个信号处理器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)

(此外,您还可以使用其他信号—例如,当用户按ctrl+C时使用SIGINT)

相关问题 更多 >