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.