繁体   English   中英

在 python 中从主线程停止子线程

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM