mirror of
https://github.com/python/cpython.git
synced 2025-08-29 05:05:03 +00:00
Rename Future._blocking to _asyncio_future_blocking.
This is now an official "protected" API that can be used to write classes that are duck-type-compatible with Future without subclassing it. (For that purpose I also changed isinstance(result, Future) to check for this attribute instead.) Hopefully Amber Brown can use this to make Twisted.Deferred compatible with asyncio.Future. Tests and docs are TBD.
This commit is contained in:
parent
c1db513e36
commit
1140a03426
2 changed files with 14 additions and 5 deletions
|
@ -249,7 +249,8 @@ class Task(futures.Future):
|
|||
self.set_exception(exc)
|
||||
raise
|
||||
else:
|
||||
if isinstance(result, futures.Future):
|
||||
blocking = getattr(result, '_asyncio_future_blocking', None)
|
||||
if blocking is not None:
|
||||
# Yielded Future must come from Future.__iter__().
|
||||
if result._loop is not self._loop:
|
||||
self._loop.call_soon(
|
||||
|
@ -257,8 +258,8 @@ class Task(futures.Future):
|
|||
RuntimeError(
|
||||
'Task {!r} got Future {!r} attached to a '
|
||||
'different loop'.format(self, result)))
|
||||
elif result._blocking:
|
||||
result._blocking = False
|
||||
elif blocking:
|
||||
result._asyncio_future_blocking = False
|
||||
result.add_done_callback(self._wakeup)
|
||||
self._fut_waiter = result
|
||||
if self._must_cancel:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue