Pat*_*ryk 7 python multithreading signals exception-handling python-3.x
有这个代码:
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()
Run Code Online (Sandbox Code Playgroud)
如何在按下时阻止此操作 Ctrlc
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
Run Code Online (Sandbox Code Playgroud)
第28行指向的地方sys.exit(0).
编辑
尝试添加t.join()(或t.join(1))在最后一个for循环中main我得到相同但我必须按下Ctrlc以获取此错误并退出程序.
Jos*_*eia 11
问题是您没有将线程设置为守护进程,也没有加入线程,因此当主线程死亡时,其余线程继续在后台运行。
如果您将代码编辑为如下所示,那么它将起作用:
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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6312 次 |
| 最近记录: |