break/interrupt a time.sleep() in python

在Python中,使用time.sleep()函数可以让程序暂停一段时间,但如果在暂停期间需要中断或停止该函数,可以使用以下两种方法:

  • 使用信号(signal)模块
  • signal模块提供了中断Python解释器进程的方法。可以利用该模块中的SIGINT信号来停止time.sleep()函数的运行。示例如下:

    import time
    import signal
    def handler(signum, frame):
        print("Interrupted by user")
        exit()
    signal.signal(signal.SIGINT, handler)
    while True:
        print("Sleeping...")
        time.sleep(1)
    

    在该示例中,当用户按下Ctrl+C时,程序会引发SIGINT信号,并且会调用handler函数,打印"Interrupted by user"并退出程序。

  • 使用threading模块
  • 另一种方法是使用多线程来控制time.sleep()的运行,以便在需要时中断该线程。示例如下:

    import time
    import threading
    def sleeper():
        while True:
            print("Sleeping...")
            time.sleep(1)
    t = threading.Thread(target=sleeper)
    t.start()
    # 让程序运行5秒钟,之后中断线程
    time.sleep(5)
    t._stop()
    

    该示例中,我们创建了一个名为sleeper()的函数,在其中利用time.sleep()函数暂停程序的运行。然后我们创建了一个新的线程并启动该函数。在主线程中,我们等待程序运行5秒钟,然后调用t._stop()方法结束sleeper()线程的运行。

    请注意,_stop()是一个不安全的方法,建议尽量避免使用。可以使用标志位或其他更安全的方法来控制线程的运行。

    • 679
  •