summaryrefslogtreecommitdiffstats
path: root/Lib/asyncio
Commit message (Collapse)AuthorAgeFilesLines
* asyncio: Fix _SelectorTransport.__repr__() if the event loop is closedVictor Stinner2015-03-271-1/+1
|
* Issue #23456: Add missing @coroutine decorators in asyncioVictor Stinner2015-03-183-0/+5
|
* asyncio: Fix repr(BaseSubprocessTransport) if it didn't start yetVictor Stinner2015-03-101-2/+5
| | | | | Replace "running" with "not started" and don't show the pid if the subprocess didn't start yet.
* Issue #23537: Remove 2 unused private methods of asyncio.BaseSubprocessTransportVictor Stinner2015-02-271-6/+0
| | | | Methods only raise NotImplementedError and are never used.
* asyncio, Tulip issue 220: Merge JoinableQueue with Queue.Victor Stinner2015-02-171-59/+43
| | | | | | | | | | | | | | Merge JoinableQueue with Queue. To more closely match the standard Queue, asyncio.Queue has "join" and "task_done". JoinableQueue is deleted. Docstring for Queue.join shouldn't mention threads. Restore JoinableQueue as a deprecated alias for Queue. To more closely match the standard Queue, asyncio.Queue has "join" and "task_done". JoinableQueue remains as a deprecated alias for Queue to avoid needlessly breaking too much code that depended on it. Patch written by A. Jesse Jiryu Davis <jesse@mongodb.com>.
* asyncio: BaseSubprocessTransport: repr() mentions when the child process isVictor Stinner2015-02-171-0/+2
| | | | running
* asyncio: BaseSubprocessTransport.close() doesn't try to kill the process if itVictor Stinner2015-02-101-1/+6
| | | | already finished
* asyncio: BaseEventLoop: rename _owner to _thread_idVictor Stinner2015-02-051-6/+6
|
* asyncio: Only call _check_resolved_address() in debug modeVictor Stinner2015-02-043-18/+36
| | | | | | | | | | | | | | | | * _check_resolved_address() is implemented with getaddrinfo() which is slow * If available, use socket.inet_pton() instead of socket.getaddrinfo(), because it is much faster Microbenchmark (timeit) on Fedora 21 (Python 3.4, Linux 3.17, glibc 2.20) to validate the IPV4 address "127.0.0.1" or the IPv6 address "::1": * getaddrinfo() 10.4 usec per loop * inet_pton(): 0.285 usec per loop On glibc older than 2.14, getaddrinfo() always requests the list of all local IP addresses to the kernel (using a NETLINK socket). getaddrinfo() has other known issues, it's better to avoid it when it is possible.
* asyncio: BaseSelectorEventLoop uses directly the private _debug attributeVictor Stinner2015-02-041-5/+5
| | | | | Just try to be consistent: _debug was already used in some places, and always used in BaseProactorEventLoop.
* asyncio, Tulip issue 221: Fix doc of QueueEmpty and QueueFullVictor Stinner2015-02-031-2/+6
|
* Issue #23353, asyncio: Workaround CPython bug #23353Victor Stinner2015-02-023-4/+23
| | | | | Don't use yield/yield-from in an except block of a generator. Store the exception and handle it outside the except block.
* Issue #23347, asyncio: send_signal(), terminate(), kill() don't check if theVictor Stinner2015-01-301-4/+3
| | | | | | | transport was closed. The check broken a Tulip example and this limitation is arbitrary. Check if _proc is None should be enough. Enhance also close(): do nothing when called the second time.
* Issue #23347, asyncio: Make BaseSubprocessTransport.wait() privateVictor Stinner2015-01-294-4/+4
|
* asyncio: sync with TulipVictor Stinner2015-01-294-87/+83
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | Issue #23347: send_signal(), kill() and terminate() methods of BaseSubprocessTransport now check if the transport was closed and if the process exited. Issue #23347: Refactor creation of subprocess transports. Changes on BaseSubprocessTransport: * Add a wait() method to wait until the child process exit * The constructor now accepts an optional waiter parameter. The _post_init() coroutine must not be called explicitly anymore. It makes subprocess transports closer to other transports, and it gives more freedom if we want later to change completly how subprocess transports are created. * close() now kills the process instead of kindly terminate it: the child process may ignore SIGTERM and continue to run. Call explicitly terminate() and wait() if you want to kindly terminate the child process. * close() now logs a warning in debug mode if the process is still running and needs to be killed * _make_subprocess_transport() is now fully asynchronous again: if the creation of the transport failed, wait asynchronously for the process eixt. Before the wait was synchronous. This change requires close() to *kill*, and not terminate, the child process. * Remove the _kill_wait() method, replaced with a more agressive close() method. It fixes _make_subprocess_transport() on error. BaseSubprocessTransport.close() calls the close() method of pipe transports, whereas _kill_wait() closed directly pipes of the subprocess.Popen object without unregistering file descriptors from the selector (which caused severe bugs). These changes simplifies the code of subprocess.py.
* Issue #23243, asyncio: Emit a ResourceWarning when an event loop or a transportVictor Stinner2015-01-298-5/+96
| | | | is not explicitly closed. Close also explicitly transports in test_sslproto.
* asyncio: sync with TulipVictor Stinner2015-01-293-13/+50
| | | | | | | | | * Cleanup gather(): use cancelled() method instead of using private Future attribute * Fix _UnixReadPipeTransport and _UnixWritePipeTransport. Only start reading when connection_made() has been called. * Issue #23333: Fix BaseSelectorEventLoop._accept_connection(). Close the transport on error. In debug mode, log errors using call_exception_handler()
* asyncio doc: document Protocol state machineVictor Stinner2015-01-291-0/+5
|
* asyncio: sync with TulipVictor Stinner2015-01-291-3/+10
| | | | | | | | | | * _SelectorTransport constructor: extra parameter is now optional * Fix _SelectorDatagramTransport constructor. Only start reading after connection_made() has been called. * Fix _SelectorSslTransport.close(). Don't call protocol.connection_lost() if protocol.connection_made() was not called yet: if the SSL handshake failed or is still in progress. The close() method can be called if the creation of the connection is cancelled, by a timeout for example.
* asyncio: BaseSubprocessTransport._kill_wait() now also call close()Victor Stinner2015-01-291-0/+3
| | | | close() closes pipes, which is not None yet by _kill_wait().
* asyncio: Fix _SelectorSocketTransport constructorVictor Stinner2015-01-281-1/+3
| | | | | Only start reading when connection_made() has been called: protocol.data_received() must not be called before protocol.connection_made().
* asyncio: SSL transports now clear their reference to the waiterVictor Stinner2015-01-284-21/+32
| | | | | | | * Rephrase also the comment explaining why the waiter is not awaken immediatly. * SSLProtocol.eof_received() doesn't instanciate ConnectionResetError exception directly, it will be done by Future.set_exception(). The exception is not used if the waiter was cancelled or if there is no waiter.
* asyncio: Fix SSLProtocol.eof_received()Victor Stinner2015-01-281-0/+4
| | | | Wake-up the waiter if it is not done yet.
* asyncio: sync with TulipVictor Stinner2015-01-272-2/+2
| | | | | | | | | | * Remove unused SSLProtocol._closing attribute * test_sslproto: skip test if ssl module is missing * Python issue #23208: Don't use the traceback of the current handle if we already know the traceback of the source. The handle may be more revelant, but having 3 tracebacks (handle, source, exception) becomes more difficult to read. The handle may be preferred later but it requires more work to make this choice.
* asyncio, Tulip issue 204: Fix IocpProactor.recv()Victor Stinner2015-01-261-7/+13
| | | | | | | | | If ReadFile() fails with ERROR_BROKEN_PIPE, the operation is not pending: don't register the overlapped. I don't know if WSARecv() can fail with ERROR_BROKEN_PIPE. Since Overlapped.WSARecv() already handled ERROR_BROKEN_PIPE, let me guess that it has the same behaviour than ReadFile().
* Issue #23095, asyncio: Fix _WaitHandleFuture.cancel()Victor Stinner2015-01-261-20/+17
| | | | | If UnregisterWaitEx() fais with ERROR_IO_PENDING, it doesn't mean that the wait is unregistered yet. We still have to wait until the wait is cancelled.
* Issue #23293, asyncio: Rewrite IocpProactor.connect_pipe() as a coroutineVictor Stinner2015-01-261-21/+18
| | | | | | | Use a coroutine with asyncio.sleep() instead of call_later() to ensure that the schedule call is cancelled. Add also a unit test cancelling connect_pipe().
* asyncio: PipeHandle.fileno() now raises an exception if the pipe is closedVictor Stinner2015-01-261-0/+2
|
* asyncio: Fix ProactorEventLoop.start_serving_pipe()Victor Stinner2015-01-261-1/+13
| | | | | If a client connected before the server was closed: drop the client (close the pipe) and exit.
* Issue #23208, asyncio: Add BaseEventLoop._current_handleVictor Stinner2015-01-261-6/+19
| | | | | | | | | In debug mode, BaseEventLoop._run_once() now sets the BaseEventLoop._current_handle attribute to the handle currently executed. In release mode or when no handle is executed, the attribute is None. BaseEventLoop.default_exception_handler() displays the traceback of the current handle if available.
* Issue #23293, asyncio: Cleanup IocpProactor.close()Victor Stinner2015-01-261-6/+1
| | | | | The special case for connect_pipe() is not more needed. connect_pipe() doesn't use overlapped operations anymore.
* asyncio: Close transports on errorVictor Stinner2015-01-261-3/+21
| | | | | Fix create_datagram_endpoint(), connect_read_pipe() and connect_write_pipe(): close the transport if the task is cancelled or on error.
* asyncio, Tulip issue 204: Fix IocpProactor.accept_pipe()Victor Stinner2015-01-221-24/+17
| | | | | | | | Overlapped.ConnectNamedPipe() now returns a boolean: True if the pipe is connected (if ConnectNamedPipe() failed with ERROR_PIPE_CONNECTED), False if the connection is in progress. This change removes multiple hacks in IocpProactor.
* Issue #23293, asyncio: Rewrite IocpProactor.connect_pipe()Victor Stinner2015-01-221-17/+26
| | | | | | | | Add _overlapped.ConnectPipe() which tries to connect to the pipe for asynchronous I/O (overlapped): call CreateFile() in a loop until it doesn't fail with ERROR_PIPE_BUSY. Use an increasing delay between 1 ms and 100 ms. Remove Overlapped.WaitNamedPipeAndConnect() which is no more used.
* asyncio: IocpProactor.close() doesn't cancel anymore futures which are alreadyVictor Stinner2015-01-221-3/+7
| | | | cancelled
* Issue #23095, asyncio: IocpProactor.close() must not cancel pendingVictor Stinner2015-01-211-0/+6
| | | | _WaitCancelFuture futures
* asyncio: BaseEventLoop._create_connection_transport() catchs any exception, notVictor Stinner2015-01-211-1/+1
| | | | only Exception
* Issue #23095, asyncio: Rewrite _WaitHandleFuture.cancel()Victor Stinner2015-01-211-34/+134
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | | This change fixes a race conditon related to _WaitHandleFuture.cancel() leading to Python crash or "GetQueuedCompletionStatus() returned an unexpected event" logs. Before, the overlapped object was destroyed too early, it was possible that the wait completed whereas the overlapped object was already destroyed. Sometimes, a different overlapped was allocated at the same address, leading to unexpected completition. _WaitHandleFuture.cancel() now waits until the wait is cancelled to clear its reference to the overlapped object. To wait until the cancellation is done, UnregisterWaitEx() is used with an event instead of UnregisterWait(). To wait for this event, a new _WaitCancelFuture class was added. It's a simplified version of _WaitCancelFuture. For example, its cancel() method calls UnregisterWait(), not UnregisterWaitEx(). _WaitCancelFuture should not be cancelled. The overlapped object is kept alive in _WaitHandleFuture until the wait is unregistered. Other changes: * Add _overlapped.UnregisterWaitEx() * Remove fast-path in IocpProactor.wait_for_handle() to immediatly set the result if the wait already completed. I'm not sure that it's safe to call immediatly UnregisterWaitEx() before the completion was signaled. * Add IocpProactor._unregistered() to forget an overlapped which may never be signaled, but may be signaled for the next loop iteration. It avoids to block forever IocpProactor.close() if a wait was cancelled, and it may also avoid some "... unexpected event ..." warnings.
* asyncio: pyflakes, remove unused importVictor Stinner2015-01-212-2/+1
| | | | tests: Remove unused function; inline another function
* asyncio: Enhance BaseProactorEventLoop._loop_self_reading()Victor Stinner2015-01-211-3/+9
| | | | | | | | * Handle correctly CancelledError: just exit * On error, log the exception and exit Don't try to close the event loop, it is probably running and so it cannot be closed.
* Backout changeset 6ab2575bc12bVictor Stinner2015-01-151-21/+4
| | | | | | | StreamWriter: close() now clears the reference to the transport StreamWriter now raises an exception if it is closed: write(), writelines(), write_eof(), can_write_eof(), get_extra_info(), drain().
* Closes #23219: cancelling asyncio.wait_for() now cancels the taskVictor Stinner2015-01-151-4/+8
|
* asyncio: Close the transport on subprocess creation failureVictor Stinner2015-01-152-2/+11
|
* asyncio: Fix _ProactorBasePipeTransport.close()Victor Stinner2015-01-151-1/+3
| | | | | | | Set the _read_fut attribute to None after cancelling it. This change should fix a race condition with _ProactorWritePipeTransport._pipe_closed().
* asyncio: Fix _ProactorBasePipeTransport.__repr__()Victor Stinner2015-01-151-3/+3
| | | | Check if the _sock attribute is None to check if the transport is closed.
* Issue #23243: Fix asyncio._UnixWritePipeTransport.close()Victor Stinner2015-01-151-1/+1
| | | | | Do nothing if the transport is already closed. Before it was not possible to close the transport twice.
* SSLProtocol: set the _transport attribute in the constructorVictor Stinner2015-01-151-0/+1
|
* Issue #23242: asyncio.SubprocessStreamProtocol now closes the subprocessVictor Stinner2015-01-151-1/+4
| | | | | | transport at subprocess exit. Clear also its reference to the transport.
* Issue #22560: Fix typo: call -> call_soonVictor Stinner2015-01-151-1/+1
|
* Issue #22560: Fix SSLProtocol._on_handshake_complete()Victor Stinner2015-01-151-2/+6
| | | | | | Don't call immediatly self._process_write_backlog() but schedule the call using call_soon(). _on_handshake_complete() can be called indirectly from _process_write_backlog(), and _process_write_backlog() is not reentrant.