How much time do we have for 3.4.1? I think in this case I think it should be a catch of CancelledError, not a finally. On success, we don't want to close the socket when the coroutine terminates. Do we?
Le jeudi 3 avril 2014 19:33:24 UTC+2, Guido van Rossum a écrit : > > On Thu, Apr 3, 2014 at 4:16 AM, Jonathan Slenders > <[email protected]<javascript:> > > wrote: > >> By blocking, I meant "not progressing anymore". Not that is blocks the >> thread. >> >> >> Should we catch CancelledError here at this line? >> https://code.google.com/p/tulip/source/browse/asyncio/base_events.py#410 >> >> > Or use a finally block. There are probably some other places where we > don't clean up when unexpected exceptions strike. This was a good catch, > Jonathan! We should make sure this is fixed in as many places as possible > before 3.4.1 goes out. > > >> >> Le jeudi 3 avril 2014 12:10:56 UTC+2, Victor Stinner a écrit : >>> >>> Hi, >>> >>> 2014-04-03 11:34 GMT+02:00 Jonathan Slenders <[email protected]>: >>> > First he proposed to wrap create_connection into wait_for with a >>> timeout=1 >>> > parameter, but that would leave the file descriptor open that was >>> created in >>> > BaseEventLoop.create_connection(). Therefore he proposes to create >>> the >>> > socket ourself, using sock_connect , and if that fails due to a >>> timeout, >>> > call sock.close manually. >>> >>> When you use wait_for(), the coroutine gets a CancelledError and so >>> can cleanup its data (close the socket). >>> >>> If create_connection() doesn't close the socket on error, it's a bug. >>> Please open an issue. >>> >>> > How is it possible that loop.create_connection blocks? >>> >>> The slowest part is probably the DNS resolution. By default, >>> getaddrinfo() is called in a thread. >>> >>> > Doesn't it just fail after a while if the host is not reachable? >>> >>> Network operations can be slow, but create_connection() should not >>> "block", the coroutine should be running in background, as any "async" >>> task. >>> >>> It would help to identify exactly which Python line hangs. >>> >>> Victor >>> >> > > > -- > --Guido van Rossum (python.org/~guido) >
