Author: jezdez
Date: 2011-06-17 06:08:36 -0700 (Fri, 17 Jun 2011)
New Revision: 16427

Modified:
   django/trunk/django/core/management/commands/runserver.py
   django/trunk/django/core/servers/basehttp.py
   django/trunk/docs/man/django-admin.1
   django/trunk/docs/ref/django-admin.txt
Log:
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.

Modified: django/trunk/django/core/management/commands/runserver.py
===================================================================
--- django/trunk/django/core/management/commands/runserver.py   2011-06-17 
09:47:08 UTC (rev 16426)
+++ django/trunk/django/core/management/commands/runserver.py   2011-06-17 
13:08:36 UTC (rev 16427)
@@ -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 @@
         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 @@
 
         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 = {

Modified: django/trunk/django/core/servers/basehttp.py
===================================================================
--- django/trunk/django/core/servers/basehttp.py        2011-06-17 09:47:08 UTC 
(rev 16426)
+++ django/trunk/django/core/servers/basehttp.py        2011-06-17 13:08:36 UTC 
(rev 16427)
@@ -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 @@
         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()

Modified: django/trunk/docs/man/django-admin.1
===================================================================
--- django/trunk/docs/man/django-admin.1        2011-06-17 09:47:08 UTC (rev 
16426)
+++ django/trunk/docs/man/django-admin.1        2011-06-17 13:08:36 UTC (rev 
16427)
@@ -75,7 +75,7 @@
 .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 @@
 .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

Modified: django/trunk/docs/ref/django-admin.txt
===================================================================
--- django/trunk/docs/ref/django-admin.txt      2011-06-17 09:47:08 UTC (rev 
16426)
+++ django/trunk/docs/ref/django-admin.txt      2011-06-17 13:08:36 UTC (rev 
16427)
@@ -688,6 +688,13 @@
 
     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

-- 
You received this message because you are subscribed to the Google Groups 
"Django updates" group.
To post to this group, send email to django-updates@googlegroups.com.
To unsubscribe from this group, send email to 
django-updates+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-updates?hl=en.

Reply via email to