[英]Stop child thread from main thread in python
我在一个新线程中启动一个网络服务器。 运行所有测试后,我想终止内部正在运行的服务器的子线程。 唯一的解决方案是通过调用“ os.system('kill %d' % os.getpid()) ”(参见下面的代码)来中断包含所有线程的整个进程。 我不确定这是最聪明的解决方案。 我不确定所有线程最终都会被杀死。 我可以在退出主线程之前发送某种“键盘中断”信号来停止线程吗?
import http
import os
import sys
import unittest
import time
import requests
import threading
from addresses import handle_get_addresses, load_addresses
from webserver import HTTPHandler
def run_in_thread(fn):
def run(*k, **kw):
t = threading.Thread(target=fn, args=k, kwargs=kw)
t.start()
return t
return run
@run_in_thread
def start_web_server():
web_host = 'localhost'
print("starting server...")
web_port = 8808
httpd = http.server.HTTPServer((web_host, web_port), HTTPHandler)
try:
httpd.serve_forever()
except KeyboardInterrupt:
pass
class TestAddressesApi(unittest.TestCase):
WEB_SERVER_THREAD: threading.Thread = None
@classmethod
def setUpClass(cls):
cls.WEB_SERVER_THREAD = start_web_server()
pass
@classmethod
def tearDownClass(cls):
print("shutting down the webserver...")
# here someting like cls.WEB_SERVER_THREAD.terminate()
# instead of line below
os.system('kill %d' % os.getpid())
def test_get_all_addresses(self):
pass
def test_1(self):
pass
if __name__ == "__main__":
unittest.main()
也许threading.Event
是你想要的。
刚刚找到解决方案。 当主线程停止工作时守护线程停止执行
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.