cpython/Lib/asyncio
Kyle Stanley 0ca7cc7fc0 bpo-38356: Fix ThreadedChildWatcher thread leak in test_asyncio (GH-16552)
Motivation for this PR (comment from @vstinner in bpo issue):
```
Warning seen o AMD64 Ubuntu Shared 3.x buildbot:
https://buildbot.python.org/all/#/builders/141/builds/2593

test_devnull_output (test.test_a=syncio.test_subprocess.SubprocessThreadedWatcherTests) ...
Warning -- threading_cleanup() failed to cleanup 1 threads (count: 1, dangling: 2)
```
The following implementation details for the new method are TBD:

1) Public vs private

2) Inclusion in `close()`

3) Name

4) Coroutine vs subroutine method

5) *timeout* parameter

If it's a private method, 3, 4, and 5 are significantly less important.

I started with the most minimal implementation that fixes the dangling threads without modifying the regression tests, which I think is particularly important. I typically try to avoid directly modifying existing tests as much as possible unless it's necessary to do so. However, I am open to changing any part of this.


https://bugs.python.org/issue38356
2020-01-12 03:02:50 -08:00
..
__init__.py bpo-38242: Revert "bpo-36889: Merge asyncio streams (GH-13251)" (#16482) 2019-09-29 21:59:55 -07:00
__main__.py bpo-37028: asyncio REPL; activated via 'python -m asyncio'. (GH-13472) 2019-05-27 13:42:29 +02:00
base_events.py bpo-39191: Fix RuntimeWarning in asyncio test (GH-17863) 2020-01-07 05:23:01 -08:00
base_futures.py bpo-34622: Extract asyncio exceptions into a separate module (GH-9141) 2018-09-11 10:13:04 -07:00
base_subprocess.py bpo-32528: Make asyncio.CancelledError a BaseException. (GH-13528) 2019-05-27 14:45:12 +02:00
base_tasks.py bpo-34270: Make it possible to name asyncio tasks (GH-8547) 2018-08-08 17:06:47 -04:00
constants.py bpo-33734: asyncio/ssl: a bunch of bugfixes (#7321) 2018-06-04 11:32:35 -04:00
coroutines.py bpo-36921: Deprecate @coroutine for sake of async def (GH-13346) 2019-05-16 07:52:10 -07:00
events.py bpo-38951: Use threading.main_thread() check in asyncio (GH-17433) 2019-12-05 04:40:12 -08:00
exceptions.py bpo-32528: Make asyncio.CancelledError a BaseException. (GH-13528) 2019-05-27 14:45:12 +02:00
format_helpers.py bpo-33672: Fix Task.__repr__ crash with Cython's bogus coroutines (GH-7161) 2018-05-28 16:27:34 -04:00
futures.py bpo-38978: Implement __class_getitem__ for asyncio objects (GH-17491) 2019-12-07 03:05:07 -08:00
locks.py bpo-36373: Fix deprecation warnings (GH-15889) 2019-09-11 01:20:24 -07:00
log.py
proactor_events.py Remove binding of captured exceptions when not used to reduce the chances of creating cycles (GH-17246) 2019-11-19 21:34:03 +00:00
protocols.py bpo-35394: Add empty slots to abstract asyncio protocols (#10889) 2018-12-11 19:07:05 +02:00
queues.py bpo-38978: Implement __class_getitem__ for asyncio objects (GH-17491) 2019-12-07 03:05:07 -08:00
runners.py Fix and improve `asyncio.run()` docs (GH-16403) 2019-09-30 17:12:21 -07:00
selector_events.py bpo-39006: Fix asyncio when the ssl module is missing (GH-17524) 2019-12-09 15:02:03 +01:00
sslproto.py bpo-37035: Don't log OSError (GH-13548) 2019-05-27 06:28:34 -07:00
staggered.py Fix import path for asyncio.TimeoutError (#17691) 2019-12-24 12:46:42 +02:00
streams.py bpo-38529: Fix asyncio stream warning (GH-17474) 2019-12-07 13:22:00 +02:00
subprocess.py bpo-38242: Revert "bpo-36889: Merge asyncio streams (GH-13251)" (#16482) 2019-09-29 21:59:55 -07:00
tasks.py bpo-34790: Implement deprecation of passing coroutines to asyncio.wait() (GH-16977) 2019-12-30 13:50:19 +02:00
transports.py bpo-38148: Add slots to asyncio transports (GH-16077) 2019-09-13 15:18:46 +03:00
trsock.py bpo-37027: Return a proxy socket object from transp.get_extra_info('socket') (GH-13530) 2019-05-27 06:57:19 -07:00
unix_events.py bpo-38356: Fix ThreadedChildWatcher thread leak in test_asyncio (GH-16552) 2020-01-12 03:02:50 -08:00
windows_events.py bpo-29883: Asyncio proactor udp (GH-13440) 2019-05-28 02:52:15 -07:00
windows_utils.py asyncio: __del__() keep reference to warnings.warn (GH-11491) 2019-01-10 11:24:40 +01:00