FAQ
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()

Search Discussions

  • Fredrik Lundh at Sep 14, 2008 at 12:39 pm

    rs387 wrote:

    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?
    it's weird enough to deserve an issue over at http://bugs.python.org/,
    at least.

    it'd probably be a good idea to test this on 2.6rc as well.

    </F>

Related Discussions

Discussion Navigation
viewthread | post
Discussion Overview
grouppython-list @
categoriespython
postedSep 14, '08 at 6:50a
activeSep 14, '08 at 12:39p
posts2
users2
websitepython.org

2 users in discussion

Fredrik Lundh: 1 post Rs387: 1 post

People

Translate

site design / logo © 2022 Grokbase