From ddd5f36971e2ffe20cc3f4b408425c847d168646 Mon Sep 17 00:00:00 2001 From: Illia Volochii Date: Thu, 1 Jul 2021 17:46:49 +0300 Subject: bpo-43234: Prohibit non-ThreadPoolExecutor in loop.set_default_executor (GH-24540) --- Doc/library/asyncio-eventloop.rst | 12 ++++-------- Doc/whatsnew/3.11.rst | 9 +++++++++ Lib/asyncio/base_events.py | 6 +----- Lib/test/test_asyncio/test_base_events.py | 8 ++++---- .../next/Library/2021-02-15-22-14-31.bpo-43234.F-vKAT.rst | 3 +++ 5 files changed, 21 insertions(+), 17 deletions(-) create mode 100644 Misc/NEWS.d/next/Library/2021-02-15-22-14-31.bpo-43234.F-vKAT.rst diff --git a/Doc/library/asyncio-eventloop.rst b/Doc/library/asyncio-eventloop.rst index 83ab736..f0f6ae6 100644 --- a/Doc/library/asyncio-eventloop.rst +++ b/Doc/library/asyncio-eventloop.rst @@ -1132,16 +1132,12 @@ Executing code in thread or process pools .. method:: loop.set_default_executor(executor) Set *executor* as the default executor used by :meth:`run_in_executor`. - *executor* should be an instance of + *executor* must be an instance of :class:`~concurrent.futures.ThreadPoolExecutor`. - .. deprecated:: 3.8 - Using an executor that is not an instance of - :class:`~concurrent.futures.ThreadPoolExecutor` is deprecated and - will trigger an error in Python 3.9. - - *executor* must be an instance of - :class:`concurrent.futures.ThreadPoolExecutor`. + .. versionchanged:: 3.11 + *executor* must be an instance of + :class:`~concurrent.futures.ThreadPoolExecutor`. Error Handling API diff --git a/Doc/whatsnew/3.11.rst b/Doc/whatsnew/3.11.rst index 94d8bef..5b51273 100644 --- a/Doc/whatsnew/3.11.rst +++ b/Doc/whatsnew/3.11.rst @@ -188,6 +188,15 @@ This section lists previously described changes and other bugfixes that may require changes to your code. +Changes in the Python API +------------------------- + +* Prohibited passing non-:class:`concurrent.futures.ThreadPoolExecutor` + executors to :meth:`loop.set_default_executor` following a deprecation in + Python 3.8. + (Contributed by Illia Volochii in :issue:`43234`.) + + C API Changes ============= diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py index f789635..74d5670 100644 --- a/Lib/asyncio/base_events.py +++ b/Lib/asyncio/base_events.py @@ -814,11 +814,7 @@ class BaseEventLoop(events.AbstractEventLoop): def set_default_executor(self, executor): if not isinstance(executor, concurrent.futures.ThreadPoolExecutor): - warnings.warn( - 'Using the default executor that is not an instance of ' - 'ThreadPoolExecutor is deprecated and will be prohibited ' - 'in Python 3.9', - DeprecationWarning, 2) + raise TypeError('executor must be ThreadPoolExecutor instance') self._default_executor = executor def _getaddrinfo_debug(self, host, port, family, type, proto, flags): diff --git a/Lib/test/test_asyncio/test_base_events.py b/Lib/test/test_asyncio/test_base_events.py index 47a9fb9..adc7bd4 100644 --- a/Lib/test/test_asyncio/test_base_events.py +++ b/Lib/test/test_asyncio/test_base_events.py @@ -224,14 +224,14 @@ class BaseEventLoopTests(test_utils.TestCase): self.loop.set_default_executor(executor) self.assertIs(executor, self.loop._default_executor) - def test_set_default_executor_deprecation_warnings(self): + def test_set_default_executor_error(self): executor = mock.Mock() - with self.assertWarns(DeprecationWarning): + msg = 'executor must be ThreadPoolExecutor instance' + with self.assertRaisesRegex(TypeError, msg): self.loop.set_default_executor(executor) - # Avoid cleaning up the executor mock - self.loop._default_executor = None + self.assertIsNone(self.loop._default_executor) def test_call_soon(self): def cb(): diff --git a/Misc/NEWS.d/next/Library/2021-02-15-22-14-31.bpo-43234.F-vKAT.rst b/Misc/NEWS.d/next/Library/2021-02-15-22-14-31.bpo-43234.F-vKAT.rst new file mode 100644 index 0000000..7f195cc --- /dev/null +++ b/Misc/NEWS.d/next/Library/2021-02-15-22-14-31.bpo-43234.F-vKAT.rst @@ -0,0 +1,3 @@ +Prohibit passing non-:class:`concurrent.futures.ThreadPoolExecutor` +executors to :meth:`loop.set_default_executor` following a deprecation in +Python 3.8. Patch by Illia Volochii. -- cgit v0.12