Here is a simple multi-threaded python web application that uses only the stanard library modules :
#!/usr/bin/env python #-*- encoding=utf-8 -*- import SimpleHTTPServer import BaseHTTPServer import SocketServer class MyServer(SocketServer.ThreadingMixIn,BaseHTTPServer.HTTPServer): pass class Handler(SimpleHTTPServer.SimpleHTTPRequestHandler): def do_GET(self): self.send_response(200) self.send_header('Content-Type', 'text/html') self.end_headers() self.wfile.write("Hello world \n") IP,PORT = "",8010 server = MyServer((IP,PORT),Handler) server.serve_forever() It will send Hello world followed by a newline (so that when you invoke curl on the terminal it will nicely put the shell prompt a newline). You can simulate a non-responsive client with this little script : import socket import requests # This will leave an open a connection to our app. conn = socket.create_connection(('localhost',8010)) # This will never get anything until conn.close() is called. print requests.get('http://localhost:8010').text.strip() If you don't inherit from the ThreadingMixIn, the application will get stuck when you launch the client script and any further requests (use curl or wget for example) will simply be postponed until client.py is killed. If you inherit from ThreadingMixIn, the application will nicely run the request handler on a new thread, making way for further requests to be handled. -- https://mail.python.org/mailman/listinfo/python-list