gpt4 book ai didi

python - 设置信号处理程序时如何防止在 : 中忽略异常?

转载 作者:行者123 更新时间:2023-12-03 12:43:39 29 4
gpt4 key购买 nike

有这个代码:

def signal_handler(signal, frame):
print("exiting")
sys.exit(0)

if __name__ == "__main__":
signal.signal(signal.SIGINT, signal_handler)

threads_arr = []
for i in list:
t = threading.Thread(target=myFunc, args=(i))
threads_arr.append(t)
t.start()

如何在按 Ctrl+C 时防止出现这种情况
Exception ignored in: <module 'threading' from '/usr/lib/python3.4/threading.py'>
Traceback (most recent call last):
File "/usr/lib/python3.4/threading.py", line 1294, in _shutdown
t.join()
File "/usr/lib/python3.4/threading.py", line 1060, in join
self._wait_for_tstate_lock()
File "/usr/lib/python3.4/threading.py", line 1076, in _wait_for_tstate_lock
elif lock.acquire(block, timeout):
File "./script.py", line 28, in signal_handler
sys.exit(0)
SystemExit: 0

其中第 28 行指向 sys.exit(0) ?

编辑
尝试添加 t.join() 后(或 t.join(1) )在最后 formain 中循环尽管我必须按 Ctrl+C 才能收到此错误并退出程序,但我得到了相同的结果。

最佳答案

问题是你没有set your threads to be daemons并且您没有加入线程,因此当主线程死亡时,其余线程继续在后台运行。

如果您将代码编辑为如下所示,那么它将起作用:

import signal
import threading
import sys

def signal_handler(signal, frame):
print("exiting")
sys.exit(0)

if __name__ == "__main__":
signal.signal(signal.SIGINT, signal_handler)

threads_arr = []
for i in list:
t = threading.Thread(target=myFunc, args=(i))
threads_arr.append(t)
t.daemon = True # die when the main thread dies
t.start()
for thr in threads_arr: # let them all start before joining
thr.join()

关于python - 设置信号处理程序时如何防止在 : <module 'threading' from . .. > 中忽略异常?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24169893/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com