请看下面的代码:
将此内容保存为“test.py”,并运行“python3 -i test.py”后,会得到一个交互式会话,其中线程定期打印“Thread is alive!”消息。
当我按Control-D或运行exit()时,python3进程不会终止,因为线程仍在运行。 我想解决这个问题。
但是,我不想将线程设置为守护线程——我想能够正确地结束/加入线程,因为在我解决的实际情况下,我想要优雅地终止网络连接。
是否有一种方法可以做到这一点? 例如,是否有可用的钩子,在REPL循环终止之后,主线程退出之前执行?
请考虑以下代码:
#! /usr/bin/env python3
import threading
import time
class MyThread(threading.Thread):
def __init__(self):
super().__init__()
self._quit_flag = False
def run(self):
while not self._quit_flag:
print("Thread is alive!")
time.sleep(0.500)
def request_quit(self):
self._quit_flag = True
mt = MyThread()
mt.start()
将此内容保存为“test.py”,并运行“python3 -i test.py”后,会得到一个交互式会话,其中线程定期打印“Thread is alive!”消息。
当我按Control-D或运行exit()时,python3进程不会终止,因为线程仍在运行。 我想解决这个问题。
但是,我不想将线程设置为守护线程——我想能够正确地结束/加入线程,因为在我解决的实际情况下,我想要优雅地终止网络连接。
是否有一种方法可以做到这一点? 例如,是否有可用的钩子,在REPL循环终止之后,主线程退出之前执行?
atexit
? - Bi Rico