Stuck connection in Python 3.0b2 http.server

R

rs387

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

Fredrik Lundh

rs387 said:
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>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,769
Messages
2,569,582
Members
45,061
Latest member
KetonaraKeto

Latest Threads

Top