[Python-checkins] bpo-32327: Revert loop.run_in_executor behaviour: return a Future. (#5392)

Yury Selivanov webhook-mailer at python.org
Sun Jan 28 14:09:42 EST 2018


https://github.com/python/cpython/commit/bec2372b7e1da5dfdbadaf242aa8e994b164cace
commit: bec2372b7e1da5dfdbadaf242aa8e994b164cace
branch: master
author: Yury Selivanov <yury at magic.io>
committer: GitHub <noreply at github.com>
date: 2018年01月28日T14:09:40-05:00
summary:
bpo-32327: Revert loop.run_in_executor behaviour: return a Future. (#5392)
I've run some tests on 3.7 asyncio and it appears that too many
things assume that run_in_executor returns a Future.
files:
M Doc/library/asyncio-eventloop.rst
M Lib/asyncio/base_events.py
M Lib/test/test_asyncio/test_tasks.py
M Misc/NEWS.d/3.7.0a4.rst
diff --git a/Doc/library/asyncio-eventloop.rst b/Doc/library/asyncio-eventloop.rst
index 78ae18391f73..5f915c5c4392 100644
--- a/Doc/library/asyncio-eventloop.rst
+++ b/Doc/library/asyncio-eventloop.rst
@@ -782,6 +782,12 @@ Resolve host name
 This method is a :ref:`coroutine <coroutine>`, similar to
 :meth:`socket.getnameinfo` function but non-blocking.
 
+.. versionchanged:: 3.7
+ Both *getaddrinfo* and *getnameinfo* methods were always documented
+ to return a coroutine, but prior to Python 3.7 they were, in fact,
+ returning :class:`asyncio.Future` objects. Starting with Python 3.7
+ both methods are coroutines.
+
 
 Connect pipes
 -------------
@@ -852,7 +858,7 @@ Call a function in an :class:`~concurrent.futures.Executor` (pool of threads or
 pool of processes). By default, an event loop uses a thread pool executor
 (:class:`~concurrent.futures.ThreadPoolExecutor`).
 
-.. coroutinemethod:: AbstractEventLoop.run_in_executor(executor, func, \*args)
+.. method:: AbstractEventLoop.run_in_executor(executor, func, \*args)
 
 Arrange for a *func* to be called in the specified executor.
 
@@ -862,6 +868,8 @@ pool of processes). By default, an event loop uses a thread pool executor
 :ref:`Use functools.partial to pass keywords to the *func*
 <asyncio-pass-keywords>`.
 
+ This method returns a :class:`asyncio.Future` object.
+
 .. versionchanged:: 3.5.3
 :meth:`BaseEventLoop.run_in_executor` no longer configures the
 ``max_workers`` of the thread pool executor it creates, instead
@@ -869,11 +877,6 @@ pool of processes). By default, an event loop uses a thread pool executor
 (:class:`~concurrent.futures.ThreadPoolExecutor`) to set the
 default.
 
- .. versionchanged:: 3.7
- Even though the method was always documented as a coroutine
- method, before Python 3.7 it returned a :class:`Future`.
- Since Python 3.7, this is an ``async def`` method.
-
 .. method:: AbstractEventLoop.set_default_executor(executor)
 
 Set the default executor used by :meth:`run_in_executor`.
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py
index 7442bf28b035..09eb440b0ef7 100644
--- a/Lib/asyncio/base_events.py
+++ b/Lib/asyncio/base_events.py
@@ -721,7 +721,7 @@ def call_soon_threadsafe(self, callback, *args, context=None):
 self._write_to_self()
 return handle
 
- async def run_in_executor(self, executor, func, *args):
+ def run_in_executor(self, executor, func, *args):
 self._check_closed()
 if self._debug:
 self._check_callback(func, 'run_in_executor')
@@ -730,7 +730,7 @@ def call_soon_threadsafe(self, callback, *args, context=None):
 if executor is None:
 executor = concurrent.futures.ThreadPoolExecutor()
 self._default_executor = executor
- return await futures.wrap_future(
+ return futures.wrap_future(
 executor.submit(func, *args), loop=self)
 
 def set_default_executor(self, executor):
diff --git a/Lib/test/test_asyncio/test_tasks.py b/Lib/test/test_asyncio/test_tasks.py
index 822338f932e7..19cf1e667fc4 100644
--- a/Lib/test/test_asyncio/test_tasks.py
+++ b/Lib/test/test_asyncio/test_tasks.py
@@ -2999,9 +2999,8 @@ def test_run_coroutine_threadsafe_task_factory_exception(self):
 def task_factory(loop, coro):
 raise NameError
 
- run = self.loop.create_task(
- self.loop.run_in_executor(
- None, lambda: self.target(advance_coro=True)))
+ run = self.loop.run_in_executor(
+ None, lambda: self.target(advance_coro=True))
 
 # Set exception handler
 callback = test_utils.MockCallback()
diff --git a/Misc/NEWS.d/3.7.0a4.rst b/Misc/NEWS.d/3.7.0a4.rst
index a6322ed405ba..5c3da97fa9d9 100644
--- a/Misc/NEWS.d/3.7.0a4.rst
+++ b/Misc/NEWS.d/3.7.0a4.rst
@@ -426,7 +426,7 @@ Implement asyncio.create_task(coro) shortcut
 
 Convert asyncio functions that were documented as coroutines to coroutines.
 Affected functions: loop.sock_sendall, loop.sock_recv, loop.sock_accept,
-loop.run_in_executor, loop.getaddrinfo, loop.getnameinfo.
+loop.getaddrinfo, loop.getnameinfo.
 
 ..
 


More information about the Python-checkins mailing list

AltStyle によって変換されたページ (->オリジナル) /