diff options
author | Yury Selivanov <yury@magic.io> | 2016-11-03 15:10:48 -0700 |
---|---|---|
committer | Yury Selivanov <yury@magic.io> | 2016-11-03 15:10:48 -0700 |
commit | 91d78f0aae3fe0d8255895296b0d9c4503a2edd8 (patch) | |
tree | 60227e008b628ec19519f0c7743d23a6ce379c50 /Lib/asyncio/base_events.py | |
parent | 7229f33ef3094f05f4780fc0814f94550adf0d7a (diff) | |
parent | a6fbcd19ac3e821f53159d06d643de65c70c1050 (diff) | |
download | cpython-git-91d78f0aae3fe0d8255895296b0d9c4503a2edd8.tar.gz |
Merge 3.6 (issue #28600)
Diffstat (limited to 'Lib/asyncio/base_events.py')
-rw-r--r-- | Lib/asyncio/base_events.py | 40 |
1 files changed, 19 insertions, 21 deletions
diff --git a/Lib/asyncio/base_events.py b/Lib/asyncio/base_events.py index cc9994d66f..68e676b5fd 100644 --- a/Lib/asyncio/base_events.py +++ b/Lib/asyncio/base_events.py @@ -532,12 +532,10 @@ class BaseEventLoop(events.AbstractEventLoop): Absolute time corresponds to the event loop's time() method. """ - if (coroutines.iscoroutine(callback) - or coroutines.iscoroutinefunction(callback)): - raise TypeError("coroutines cannot be used with call_at()") self._check_closed() if self._debug: self._check_thread() + self._check_callback(callback, 'call_at') timer = events.TimerHandle(when, callback, args, self) if timer._source_traceback: del timer._source_traceback[-1] @@ -555,18 +553,27 @@ class BaseEventLoop(events.AbstractEventLoop): Any positional arguments after the callback will be passed to the callback when it is called. """ + self._check_closed() if self._debug: self._check_thread() + self._check_callback(callback, 'call_soon') handle = self._call_soon(callback, args) if handle._source_traceback: del handle._source_traceback[-1] return handle + def _check_callback(self, callback, method): + if (coroutines.iscoroutine(callback) or + coroutines.iscoroutinefunction(callback)): + raise TypeError( + "coroutines cannot be used with {}()".format(method)) + if not callable(callback): + raise TypeError( + 'a callable object was expected by {}(), got {!r}'.format( + method, callback)) + + def _call_soon(self, callback, args): - if (coroutines.iscoroutine(callback) - or coroutines.iscoroutinefunction(callback)): - raise TypeError("coroutines cannot be used with call_soon()") - self._check_closed() handle = events.Handle(callback, args, self) if handle._source_traceback: del handle._source_traceback[-1] @@ -592,6 +599,9 @@ class BaseEventLoop(events.AbstractEventLoop): def call_soon_threadsafe(self, callback, *args): """Like call_soon(), but thread-safe.""" + self._check_closed() + if self._debug: + self._check_callback(callback, 'call_soon_threadsafe') handle = self._call_soon(callback, args) if handle._source_traceback: del handle._source_traceback[-1] @@ -599,21 +609,9 @@ class BaseEventLoop(events.AbstractEventLoop): return handle def run_in_executor(self, executor, func, *args): - if (coroutines.iscoroutine(func) - or coroutines.iscoroutinefunction(func)): - raise TypeError("coroutines cannot be used with run_in_executor()") self._check_closed() - if isinstance(func, events.Handle): - assert not args - assert not isinstance(func, events.TimerHandle) - warnings.warn( - "Passing Handle to loop.run_in_executor() is deprecated", - DeprecationWarning) - if func._cancelled: - f = self.create_future() - f.set_result(None) - return f - func, args = func._callback, func._args + if self._debug: + self._check_callback(func, 'run_in_executor') if executor is None: executor = self._default_executor if executor is None: |