Skip to content

Commit 32a25e9

Browse files
alexrashedcsernazs
authored andcommitted
explicitly spawn daemon thread for http server
1 parent 414173b commit 32a25e9

File tree

3 files changed

+24
-1
lines changed

3 files changed

+24
-1
lines changed

pytest_httpserver/httpserver.py

+2-1
Original file line numberDiff line numberDiff line change
@@ -770,7 +770,8 @@ def start(self) -> None:
770770
)
771771

772772
self.port = self.server.port # Update port (needed if `port` was set to 0)
773-
self.server_thread = threading.Thread(target=self.thread_target)
773+
# Explicitly make the new thread daemonic to avoid shutdown issues
774+
self.server_thread = threading.Thread(target=self.thread_target, daemon=True)
774775
self.server_thread.start()
775776

776777
def stop(self):

tests/test_release.py

+1
Original file line numberDiff line numberDiff line change
@@ -233,6 +233,7 @@ def test_sdist_contents(build: Build, version: str):
233233
"test_querystring.py",
234234
"test_release.py",
235235
"test_ssl.py",
236+
"test_thread_type.py",
236237
"test_threaded.py",
237238
"test_urimatch.py",
238239
"test_wait.py",

tests/test_thread_type.py

+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
from __future__ import annotations
2+
3+
import threading
4+
from typing import TYPE_CHECKING
5+
6+
import requests
7+
from werkzeug import Response
8+
9+
if TYPE_CHECKING:
10+
from werkzeug import Request
11+
12+
from pytest_httpserver import HTTPServer
13+
14+
15+
def test_server_thread_is_daemon(httpserver: HTTPServer):
16+
def handler(_request: Request):
17+
return Response(f"{threading.current_thread().daemon}")
18+
19+
httpserver.expect_request("/foo").respond_with_handler(handler)
20+
21+
assert requests.get(httpserver.url_for("/foo")).text == "True"

0 commit comments

Comments
 (0)