[Python-Dev] httplib &c. timeouts and global state

John J Lee jjl at pobox.com
Sat Mar 22 03:40:00 CET 2008


http://python.org/sf/2451

"""
The new timeout support in 2.6 makes use of new function
socket.create_connection().  socket.create_connection() provides no way
to disable timeouts, other than by relying on socket.getdefaulttimeout()
returning None.  This is unfortunate, because it was the purpose of the
new timeout support to allow control of timeouts without reliance on
global state.

setdefaultsocket.create_connection() should always call
sock.settimeout() with the timeout passed to create_connection(), unless
a special non-None value is passed indicating that the global default is
to be used.  Specific modules may then use that special non-None value
where required, to preserve backwards-compatibility.
"""

Facundo doesn't seem to agree.  If I understand him correctly, he objects 
to the use of a special value other than None as an argument value.  I 
think avoiding this minor complication is secondary to avoiding 
gratuitously imposing global state on users where it's not needed.

Much existing code uses .setdefaulttimeout(), because legacy code does not 
expose the socket timeout.  Of course, not all of that code can be changed 
immediately (otherwise, why did we wait so long before Facundo did his 
valuable work on this?).  Of course, very often, code that calls 
socket.setdefaulttimeout(some_non_none_value) wants a default timeout for 
everything.  But that isn't *always* the case, and standard library 
modules that expose the timeout feature should not make that assumption. 
For example, an application might only want to set a timeout for some 
non-essential network operation.  As another example, useful but 
poorly-written library code might call .setdefaulttimeout().  Also, ISTM 
there's a big difference between nobody having contributed the time to 
implement the feature on the one hand, and deliberately imposing the 
global socket timeout state on users on the other!


Facundo indicates in the tracker discussion for 2451 that a decision was 
made here about this, but doesn't recall exactly which post, and directed 
me here.  What I found in the archive is this thread (sorry for the 
non-python.org URL):

http://www.gossamer-threads.com/lists/python/dev/555039?do=post_view_threaded#555039


In that discussion, this issue is raised, but I don't see any resolution 
that answers the objection made in issue 2451.  Anyway, apologies in 
advance if there was a decision here that takes account of the above 
objection.

I do want to thank Facundo for adding the timeout support to modules such 
as httplib.  But I also want to loudly complain about this detail :-)


John



More information about the Python-Dev mailing list