Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Browse files

Fixed #16099 -- Enabled threading for the runserver management comman…

…d 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
  • Loading branch information...
commit ce165f7bbf0c481a20db6b4b9f764b8bb89348ba 1 parent 838a16e
@jezdez jezdez authored
View
7 django/core/management/commands/runserver.py
@@ -17,10 +17,13 @@
):)?(?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 @@ def inner_run(self, *args, **options):
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 @@ def inner_run(self, *args, **options):
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 = {
View
9 django/core/servers/basehttp.py
@@ -12,6 +12,7 @@
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 @@ def _should_handle(self, path):
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()
View
5 docs/man/django-admin.1
@@ -75,7 +75,7 @@ Runs this project as a FastCGI application. Requires flup. Use
.B runfcgi help
for help on the KEY=val pairs.
.TP
-.BI "runserver [" "\-\-noreload" "] [" "\-\-nostatic" "] [" "\-\-insecure" "] [" "\-\-ipv6" "] [" "\-\-adminmedia=ADMIN_MEDIA_PATH" "] [" "port|ipaddr:port" "]"
+.BI "runserver [" "\-\-noreload" "] [" "\-\-nothreading" "] [" "\-\-nostatic" "] [" "\-\-insecure" "] [" "\-\-ipv6" "] [" "\-\-adminmedia=ADMIN_MEDIA_PATH" "] [" "port|ipaddr:port" "]"
Starts a lightweight Web server for development.
.TP
.BI "shell [" "\-\-plain" "]"
@@ -167,6 +167,9 @@ Disable the development server's auto\-reloader.
.I \-\-nostatic
Disable automatic serving of static files from STATIC_URL.
.TP
+.I \-\-nothreading
+Disable the development server's threading.
+.TP
.I \-\-insecure
Enables serving of static files even if DEBUG is False.
.TP
View
7 docs/ref/django-admin.txt
@@ -688,6 +688,13 @@ Example usage::
django-admin.py runserver --noreload
+.. django-admin-option:: --nothreading
+
+.. versionadded:: 1.4
+
+Use the ``--nothreading`` option to disable the use of threading in the
+development server.
+
.. django-admin-option:: --ipv6, -6
.. versionadded:: 1.3

0 comments on commit ce165f7

Please sign in to comment.
Something went wrong with that request. Please try again.