Skip to content
Quick hack that provides a runconcurrentserver command, broadly similar to Django ticket:3357 without patching Django itself
Latest commit e25d7c6 Mar 10, 2014 @jaylett Merge pull request #3 from GunioRobot/clean
Remove an iota of whitespace.
Failed to load latest commit information.
django_concurrent_test_server Calling super with SocketServer.ForkingMixIn as the type seems to be … Sep 21, 2011



<> is a Django ticket about making the built-in dev server concurrent. This isn't going to happen any time soon, but one of the comments wondered about turning the patch in the ticket into a separate app that could be dropped in to provide a concurrent dev server as a new command. This is what django_concurrent_test_server does.

Note that with the forking server, it is possible for a child process to survive when the parent dies; the child retains the open listen socket, so you have to find it and kill it before restarting the server. It should be possible to fix this, but I haven't looked into it yet; unless you are aware of threading problems in your code or extensions, you should probably use that for preference.

Almost all the work was done by Istvan Albert, as per <> on <>. Additionally I've duplicated the runserver command from Django itself, and repackaged the whole lot.

Given the context of the original discussion, and the presence of the patch on the Django ticket, I'm distributing this under the Django license with the normal "Django Software Foundation and individual contributors" copyright statement.

James Aylett <>


1. Drop the django_concurrent_test_server directory somewhere on your PYTHONPATH
2. Add django_concurrent_test_server to your INSTALLED_APPS
3. If threads worry you, and bearing the above warning in mind, set
   CONCURRENT_THREADING = False in to use forking
4. Use ./ runconcurrentserver to start a concurrent server
5. (optional) Add CONCURRENT_RANDOM_DELAY = True to your to
   introduce a small, random delay into each request; useful for finding race
   conditions. (By <>.)
   to override the defaults without having to hack the code. Useful for people
   who don't like aliases, or move things between machines a lot.
Something went wrong with that request. Please try again.