Stuck connection in Python 3.0b2 http.server

rs387 rstarkov at gmail.com
Sun Sep 14 02:50:28 EDT 2008


Hi All

I've encountered a weird issue when migrating a web server to Python 3
- the browser would wait forever without showing a page, displaying
"Transferring data" in the status bar. I tracked it down to a
reference cycle in my BaseHTTPRequestHandler descendant - one of the
attributes stored a dict of methods. Removing the cycle made the
problem go away.

In Python 2.5.2 the code works fine either way.

Here's a minimal example which runs in both 2.5 and 3.0 - to see stuck
connections run as-is in 3.0 and navigate to http://localhost:8123; to
fix this comment out "self.dummy = self" (alternatively reset
self.dummy = None at the end of the __init__ method).

Am I doing it wrong, or is this a bug?


try:
    import http.server
    httpmodule = http.server
except:
    import BaseHTTPServer
    httpmodule = BaseHTTPServer

class BreakageRequest(httpmodule.BaseHTTPRequestHandler):
    def __init__(self, request, client_address, server):
        self.dummy = self     # COMMENT THIS OUT to see the connection
become unstuck
        httpmodule.BaseHTTPRequestHandler.__init__(self, request,
client_address, server)
    def do_GET(self):
        self.send_response(200)
        self.send_header("Content-Type", "application/xml")
        self.end_headers()
        self.wfile.write("<is_it_stuck/>".encode('utf-8'))

srv = httpmodule.HTTPServer(('', 8123), BreakageRequest)
srv.serve_forever()



More information about the Python-list mailing list