[Twisted-Python] deferreds and hung connections

Lenny G Arbage alengarbage at yahoo.com
Wed Mar 9 10:28:49 MST 2005


Suppose I am using twisted.web.client.getPage() to
retrieve webpages.  I am setting a callback and an
errback for the result, and this all works
fantastically.

But what about the case where the webserver simply
hangs with the connection open, never returning with
either a result or an error?

I assume that my errback will get called if the socket
times out and closes (right?).  But what if I don't
want to wait that long -- what if I want to do my own
timeout after N seconds/minutes?

I've been looking for examples of how to do this, and
monkeying with reactor.callLater() with partial
success.  If I save the id from callLater(), I can
cancel the timeout in callback() or errback(). 
However, if the timeout does get fired, I get:

[Failure instance: Traceback:
twisted.internet.error.AlreadyCalled, Tried to cancel
an already-called event.
/usr/lib/python2.3/site-packages/twisted/internet/defer.py:338:_runCallbacks
/tmp/deferred2.py:21:errback
/usr/lib/python2.3/site-packages/twisted/internet/base.py:82:cancel
]

Am I going about this the wrong way?  Perhaps twisted
has some built-ins that I'm not aware of to do
essentially the same thing?

I have a modified example from the Defer Howto that
exhibits this behavior.  I can post if the above
explanation isn't enough.

    thanks,
    Lenny


	
		
__________________________________ 
Celebrate Yahoo!'s 10th Birthday! 
Yahoo! Netrospective: 100 Moments of the Web 
http://birthday.yahoo.com/netrospective/




More information about the Twisted-Python mailing list