Commit 0f0a30f4 authored by Victor Stinner's avatar Victor Stinner Committed by GitHub

bpo-34037, asyncio: add BaseEventLoop.wait_executor_on_close (GH-13786)

Add BaseEventLoop.wait_executor_on_close attribute: true by default.

loop.close() now waits for the default executor to finish by default.
Set loop.wait_executor_on_close attribute to False to not wait for
the executor.
parent 78c7d527
......@@ -140,12 +140,18 @@ Running and stopping the loop
The loop must not be running when this function is called.
Any pending callbacks will be discarded.
This method clears all queues and shuts down the executor, but does
not wait for the executor to finish.
This method clears all queues and shuts down the default executor. By
default, it waits for the default executor to finish. Set
*loop.wait_executor_on_close* to ``False`` to not wait for the executor.
This method is idempotent and irreversible. No other methods
should be called after the event loop is closed.
.. versionchanged:: 3.8
The method now waits for the default executor to finish by default.
Added *loop.wait_executor_on_close* attribute.
.. coroutinemethod:: loop.shutdown_asyncgens()
Schedule all currently open :term:`asynchronous generator` objects to
......
......@@ -380,6 +380,8 @@ class Server(events.AbstractServer):
class BaseEventLoop(events.AbstractEventLoop):
def __init__(self):
# If true, close() waits for the default executor to finish
self.wait_executor_on_close = True
self._timer_cancelled_count = 0
self._closed = False
self._stopping = False
......@@ -635,7 +637,7 @@ class BaseEventLoop(events.AbstractEventLoop):
executor = self._default_executor
if executor is not None:
self._default_executor = None
executor.shutdown(wait=False)
executor.shutdown(wait=self.wait_executor_on_close)
def is_closed(self):
"""Returns True if the event loop was closed."""
......
:mod:`asyncio`: ``loop.close()`` now waits for the default executor to
finish by default. Set ``loop.wait_executor_on_close`` attribute to
``False`` to opt-in for Python 3.7 behavior (not wait for the executor to
finish).
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment