mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
bpo-47167: Allow overriding a future compliance check in asyncio.Task (GH-32197)
This commit is contained in:
parent
ab89ccff3c
commit
d4bb38f82b
6 changed files with 133 additions and 15 deletions
|
@ -252,6 +252,10 @@ class Task(futures._PyFuture): # Inherit Python Task implementation
|
|||
self._num_cancels_requested -= 1
|
||||
return self._num_cancels_requested
|
||||
|
||||
def _check_future(self, future):
|
||||
"""Return False if task and future loops are not compatible."""
|
||||
return futures._get_loop(future) is self._loop
|
||||
|
||||
def __step(self, exc=None):
|
||||
if self.done():
|
||||
raise exceptions.InvalidStateError(
|
||||
|
@ -292,7 +296,7 @@ class Task(futures._PyFuture): # Inherit Python Task implementation
|
|||
blocking = getattr(result, '_asyncio_future_blocking', None)
|
||||
if blocking is not None:
|
||||
# Yielded Future must come from Future.__iter__().
|
||||
if futures._get_loop(result) is not self._loop:
|
||||
if not self._check_future(result):
|
||||
new_exc = RuntimeError(
|
||||
f'Task {self!r} got Future '
|
||||
f'{result!r} attached to a different loop')
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue