Python3:在另一个线程上断言时杀死主线程



请看这个代码:

#! /usr/bin/env python3
import threading
import time

def asserter():
time.sleep(3)
assert False

threading.Thread(target=asserter).start()
while True:
print('Main')
time.sleep(1)

我需要主循环在启动断言时死亡。应该怎么做?

您需要在线程本身中捕获任何线程异常。然后,您可以以某种方式将该结果传达回主线程。下面是一个使用共享标志对象指示线程已崩溃的最小示例。然后,主循环可以简单地等待该标志更改。

import threading
import time
class Flag:
ended = False
def asserter(flag):
time.sleep(3)
try:
assert False
except AssertionError:
flag.ended = True

thread = threading.Thread(target=asserter, args=(Flag,))
thread.start()
while not Flag.ended:
print('Main')
time.sleep(1)
print('done')

感谢 101,我将代码修改为:

#! /usr/bin/env python3
import threading
import time

class Flag:
exception = None

def asserter(flag):
time.sleep(3)
try:
assert False
except Exception as e:
flag.exception = e

threading.Thread(target=asserter, args=(Flag,)).start()
while not Flag.exception:
print('Main')
time.sleep(1)
raise Flag.exception

现在我可以终止主程序,看看发生了什么

相关内容

  • 没有找到相关文章

最新更新