Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 7 additions & 4 deletions django/core/servers/basehttp.py
Original file line number Diff line number Diff line change
Expand Up @@ -85,6 +85,12 @@ def handle_error(self, request, client_address):
super(WSGIServer, self).handle_error(request, client_address)


class ThreadedWSGIServer(socketserver.ThreadingMixIn, WSGIServer):
"""
Multi-threaded WSGI server.
"""


# Inheriting from object required on Python 2.
class ServerHandler(simple_server.ServerHandler, object):
def handle_error(self):
Expand Down Expand Up @@ -162,10 +168,7 @@ def handle(self):

def run(addr, port, wsgi_handler, ipv6=False, threading=False):
server_address = (addr, port)
if threading:
httpd_cls = type(str('WSGIServer'), (socketserver.ThreadingMixIn, WSGIServer), {})
else:
httpd_cls = WSGIServer
httpd_cls = ThreadedWSGIServer if threading else WSGIServer
httpd = httpd_cls(server_address, WSGIRequestHandler, ipv6=ipv6)
if threading:
# ThreadingMixIn.daemon_threads indicates how threads will behave on an
Expand Down
6 changes: 4 additions & 2 deletions django/test/testcases.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
from django.core.management import call_command
from django.core.management.color import no_style
from django.core.management.sql import emit_post_migrate_signal
from django.core.servers.basehttp import WSGIRequestHandler, WSGIServer
from django.core.servers.basehttp import WSGIRequestHandler, ThreadedWSGIServer
from django.db import DEFAULT_DB_ALIAS, connection, connections, transaction
from django.forms.fields import CharField
from django.http import QueryDict
Expand Down Expand Up @@ -1289,7 +1289,9 @@ def run(self):
connections.close_all()

def _create_server(self, port):
return WSGIServer((self.host, port), QuietWSGIRequestHandler, allow_reuse_address=False)
return ThreadedWSGIServer(
(self.host, port), QuietWSGIRequestHandler, allow_reuse_address=False
)

def terminate(self):
if hasattr(self, 'httpd'):
Expand Down