mirror of
https://github.com/python/cpython.git
synced 2025-09-18 22:50:26 +00:00
GH-94597: add deprecation warnings for subclassing AbstractChildWatcher
(#99386)
This commit is contained in:
parent
e02cc6d42a
commit
aa874326d8
5 changed files with 21 additions and 3 deletions
|
@ -222,6 +222,9 @@ implementation used by the asyncio event loop:
|
|||
This method has to be called to ensure that underlying
|
||||
resources are cleaned-up.
|
||||
|
||||
.. deprecated:: 3.12
|
||||
|
||||
|
||||
.. class:: ThreadedChildWatcher
|
||||
|
||||
This implementation starts a new waiting thread for every subprocess spawn.
|
||||
|
|
|
@ -203,8 +203,8 @@ asyncio
|
|||
(Contributed by Kumar Aditya in :gh:`98024`.)
|
||||
|
||||
* The child watcher classes :class:`~asyncio.MultiLoopChildWatcher`,
|
||||
:class:`~asyncio.FastChildWatcher` and
|
||||
:class:`~asyncio.SafeChildWatcher` are deprecated and
|
||||
:class:`~asyncio.FastChildWatcher`, :class:`~asyncio.AbstractChildWatcher`
|
||||
and :class:`~asyncio.SafeChildWatcher` are deprecated and
|
||||
will be removed in Python 3.14. It is recommended to not manually
|
||||
configure a child watcher as the event loop now uses the best available
|
||||
child watcher for each platform (:class:`~asyncio.PidfdChildWatcher`
|
||||
|
|
|
@ -846,6 +846,13 @@ class AbstractChildWatcher:
|
|||
waitpid(-1), there should be only one active object per process.
|
||||
"""
|
||||
|
||||
def __init_subclass__(cls) -> None:
|
||||
if cls.__module__ != __name__:
|
||||
warnings._deprecated("AbstractChildWatcher",
|
||||
"{name!r} is deprecated as of Python 3.12 and will be "
|
||||
"removed in Python {remove}.",
|
||||
remove=(3, 14))
|
||||
|
||||
def add_child_handler(self, pid, callback, *args):
|
||||
"""Register a new child handler.
|
||||
|
||||
|
|
|
@ -1108,6 +1108,11 @@ class UnixWritePipeTransportTests(test_utils.TestCase):
|
|||
|
||||
class AbstractChildWatcherTests(unittest.TestCase):
|
||||
|
||||
def test_warns_on_subclassing(self):
|
||||
with self.assertWarns(DeprecationWarning):
|
||||
class MyWatcher(asyncio.AbstractChildWatcher):
|
||||
pass
|
||||
|
||||
def test_not_implemented(self):
|
||||
f = mock.Mock()
|
||||
watcher = asyncio.AbstractChildWatcher()
|
||||
|
@ -1747,7 +1752,9 @@ class PolicyTests(unittest.TestCase):
|
|||
|
||||
self.assertIsInstance(policy.get_event_loop(),
|
||||
asyncio.AbstractEventLoop)
|
||||
watcher = policy.get_child_watcher()
|
||||
with warnings.catch_warnings():
|
||||
warnings.simplefilter("ignore", DeprecationWarning)
|
||||
watcher = policy.get_child_watcher()
|
||||
|
||||
self.assertIsInstance(watcher, asyncio.SafeChildWatcher)
|
||||
self.assertIsNone(watcher._loop)
|
||||
|
|
|
@ -0,0 +1 @@
|
|||
Deprecate :class:`asyncio.AbstractChildWatcher` to be removed in Python 3.14. Patch by Kumar Aditya.
|
Loading…
Add table
Add a link
Reference in a new issue