[Twisted-web] Connection lost in a non-clean fashion

exarkun at twistedmatrix.com exarkun at twistedmatrix.com
Wed Dec 9 10:30:09 EST 2009

On 11:37 am, billoldroyd at gmail.com wrote:
>I have developed a web server based on twisted-web that acts as a 
>between the SRU search protocol and the Z39.50 search protocol. ( 
>Details at
>http://www.loc.gov/z3950/agency/ )

Cool.  I dabbled with Z39.50 very briefly a while ago.  Any chance 
you'll develop a Twisted-based implementation of this protocol? :)
>Each SRU search request opens a thread which performs a Z39.50 search 
>on a
>remote target and then returns the results which are converted into the 
>Sometimes the connection with the client issuing the SRU request is 
>lost. In
>a few cases this produces the message "Connection to the other side was 
>in a non-clean fashion: Connection lost. ". When several of these non- 
>connection losses occur the web server will become unresponsive and 
>will not
>respond to any new requests.

I think it's unusual that the server would become unresponsive after 
several lost client connections.  Are you using deferToThread to do the 
Z39.50 searches?  If so, then the task should complete (or not) 
regardless of what happens to the web connection.  deferToThread uses a 
thread pool, though.  Once all the threads in the pool are in use, 
further jobs won't even be started until one of the threads becomes 

Perhaps some searches take a long, long time?  This would tie up thread 
pool resources, preventing new jobs from being processed, and perhaps 
correlate somewhat with lost client connections (which give up after 
waiting for such a long time for their results).
>Can anyone help with how I should respond to these non-clean lost
>connections ?. I can't find any documentation which helps me understand 
>impact of this type of error. As the connection is lost there is no 
>point in
>returning any error response, but are there systems resources left 
>which might be causing the server to become unresponsive.

I wrote about how to do this:


So, regardless of the thread pool stuff I talked about above, that 
should help you to at least handle the connection lost errors and clean 
up other resources.


More information about the Twisted-web mailing list