mirror of
https://github.com/django/django.git
synced 2025-11-07 07:15:35 +00:00
Fixed #16099 -- Enabled threading for the runserver management command and added a --nothreading option to disable it if needed. This should help Google Chrome users because it opens more than one connection speculatively.
git-svn-id: http://code.djangoproject.com/svn/django/trunk@16427 bcc190cf-cafb-0310-a4f2-bffc1f526a37
This commit is contained in:
@@ -17,10 +17,13 @@ naiveip_re = re.compile(r"""^(?:
|
||||
):)?(?P<port>\d+)$""", re.X)
|
||||
DEFAULT_PORT = "8000"
|
||||
|
||||
|
||||
class BaseRunserverCommand(BaseCommand):
|
||||
option_list = BaseCommand.option_list + (
|
||||
make_option('--ipv6', '-6', action='store_true', dest='use_ipv6', default=False,
|
||||
help='Tells Django to use a IPv6 address.'),
|
||||
make_option('--nothreading', action='store_false', dest='use_threading', default=True,
|
||||
help='Use threading for web server.'),
|
||||
make_option('--noreload', action='store_false', dest='use_reloader', default=True,
|
||||
help='Tells Django to NOT use the auto-reloader.'),
|
||||
)
|
||||
@@ -81,6 +84,7 @@ class BaseRunserverCommand(BaseCommand):
|
||||
from django.conf import settings
|
||||
from django.utils import translation
|
||||
|
||||
threading = options.get('use_threading', False)
|
||||
shutdown_message = options.get('shutdown_message', '')
|
||||
quit_command = (sys.platform == 'win32') and 'CTRL-BREAK' or 'CONTROL-C'
|
||||
|
||||
@@ -104,7 +108,8 @@ class BaseRunserverCommand(BaseCommand):
|
||||
|
||||
try:
|
||||
handler = self.get_handler(*args, **options)
|
||||
run(self.addr, int(self.port), handler, ipv6=self.use_ipv6)
|
||||
run(self.addr, int(self.port), handler,
|
||||
ipv6=self.use_ipv6, threading=threading)
|
||||
except WSGIServerException, e:
|
||||
# Use helpful error messages instead of ugly tracebacks.
|
||||
ERRORS = {
|
||||
|
||||
@@ -12,6 +12,7 @@ import socket
|
||||
import sys
|
||||
import traceback
|
||||
import urllib
|
||||
from SocketServer import ThreadingMixIn
|
||||
from wsgiref import simple_server
|
||||
from wsgiref.util import FileWrapper # for backwards compatibility
|
||||
|
||||
@@ -205,8 +206,12 @@ class AdminMediaHandler(handlers.StaticFilesHandler):
|
||||
return path.startswith(self.base_url[2]) and not self.base_url[1]
|
||||
|
||||
|
||||
def run(addr, port, wsgi_handler, ipv6=False):
|
||||
def run(addr, port, wsgi_handler, ipv6=False, threading=False):
|
||||
server_address = (addr, port)
|
||||
httpd = WSGIServer(server_address, WSGIRequestHandler, ipv6=ipv6)
|
||||
if threading:
|
||||
httpd_cls = type('WSGIServer', (ThreadingMixIn, WSGIServer), {})
|
||||
else:
|
||||
httpd_cls = WSGIServer
|
||||
httpd = httpd_cls(server_address, WSGIRequestHandler, ipv6=ipv6)
|
||||
httpd.set_app(wsgi_handler)
|
||||
httpd.serve_forever()
|
||||
|
||||
Reference in New Issue
Block a user