diff --git a/pytest_httpserver/httpserver.py b/pytest_httpserver/httpserver.py index 71334dc..42525a7 100644 --- a/pytest_httpserver/httpserver.py +++ b/pytest_httpserver/httpserver.py @@ -770,7 +770,8 @@ def start(self) -> None: ) self.port = self.server.port # Update port (needed if `port` was set to 0) - self.server_thread = threading.Thread(target=self.thread_target) + # Explicitly make the new thread daemonic to avoid shutdown issues + self.server_thread = threading.Thread(target=self.thread_target, daemon=True) self.server_thread.start() def stop(self): diff --git a/tests/test_release.py b/tests/test_release.py index 3184828..3cba8d4 100644 --- a/tests/test_release.py +++ b/tests/test_release.py @@ -233,6 +233,7 @@ def test_sdist_contents(build: Build, version: str): "test_querystring.py", "test_release.py", "test_ssl.py", + "test_thread_type.py", "test_threaded.py", "test_urimatch.py", "test_wait.py", diff --git a/tests/test_thread_type.py b/tests/test_thread_type.py new file mode 100644 index 0000000..d3f7c6b --- /dev/null +++ b/tests/test_thread_type.py @@ -0,0 +1,21 @@ +from __future__ import annotations + +import threading +from typing import TYPE_CHECKING + +import requests +from werkzeug import Response + +if TYPE_CHECKING: + from werkzeug import Request + + from pytest_httpserver import HTTPServer + + +def test_server_thread_is_daemon(httpserver: HTTPServer): + def handler(_request: Request): + return Response(f"{threading.current_thread().daemon}") + + httpserver.expect_request("/foo").respond_with_handler(handler) + + assert requests.get(httpserver.url_for("/foo")).text == "True"