【问题标题】:Python script required multiple CTRL + C to stopPython 脚本需要多个 CTRL + C 才能停止
【发布时间】:2021-05-18 02:44:28
【问题描述】:

我有一个场景,我想处理 SIGINT int python 来清理一些东西然后退出。 我正在使用以下代码。

import threading
import signal

def shutdown_handler(*args):
    raise SystemExit('Exiting')

signal.signal(signal.SIGINT, shutdown_handler)

def main():
    while 1:
        time.sleep(2)
        print("***")
    
sub_thread = threading.Thread(target=main)
sub_thread.start()
sub_thread.join()

但它需要我在程序退出之前多次按 CTRL + c。 以下工作正常

import time
import threading
import signal

def shutdown_handler(*args):
    # Do some clean up here. 
    raise SystemExit('Exiting')

signal.signal(signal.SIGINT, shutdown_handler)

def main():
    while 1:
        time.sleep(2)
        print("***")
    
main()

我正在使用第一个代码,因为this 线程上的建议
你能告诉我为什么这种行为。是因为运行了多个线程,我该如何解决这个问题? 谢谢

【问题讨论】:

标签: python python-multithreading


【解决方案1】:

如果用一个Control-C 终止程序是您唯一的要求,请在构造函数中设置daemon=True

import threading
import signal

def shutdown_handler(*args):
    raise SystemExit('Exiting')

signal.signal(signal.SIGINT, shutdown_handler)

def main():
    while 1:
        time.sleep(2)
        print("***")
    
sub_thread = threading.Thread(target=main, daemon=True) # here
sub_thread.start()
sub_thread.join()

【讨论】:

    猜你喜欢
    • 2018-12-25
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 2011-10-07
    • 2019-06-10
    • 1970-01-01
    • 2018-10-04
    • 1970-01-01
    相关资源
    最近更新 更多