(Merge 3.4) Issue #21163: BaseEventLoop.run_until_complete() and
test_utils.run_briefly() don't log the "destroy pending task" message anymore. The log is redundant for run_until_complete() and useless in run_briefly().
This commit is contained in:
commit
b1f9ed75bd
|
@ -227,7 +227,14 @@ class BaseEventLoop(events.AbstractEventLoop):
|
||||||
Return the Future's result, or raise its exception.
|
Return the Future's result, or raise its exception.
|
||||||
"""
|
"""
|
||||||
self._check_closed()
|
self._check_closed()
|
||||||
|
|
||||||
|
new_task = not isinstance(future, futures.Future)
|
||||||
future = tasks.async(future, loop=self)
|
future = tasks.async(future, loop=self)
|
||||||
|
if new_task:
|
||||||
|
# An exception is raised if the future didn't complete, so there
|
||||||
|
# is no need to log the "destroy pending task" message
|
||||||
|
future._log_destroy_pending = False
|
||||||
|
|
||||||
future.add_done_callback(_raise_stop_error)
|
future.add_done_callback(_raise_stop_error)
|
||||||
self.run_forever()
|
self.run_forever()
|
||||||
future.remove_done_callback(_raise_stop_error)
|
future.remove_done_callback(_raise_stop_error)
|
||||||
|
|
|
@ -75,13 +75,16 @@ class Task(futures.Future):
|
||||||
self._must_cancel = False
|
self._must_cancel = False
|
||||||
self._loop.call_soon(self._step)
|
self._loop.call_soon(self._step)
|
||||||
self.__class__._all_tasks.add(self)
|
self.__class__._all_tasks.add(self)
|
||||||
|
# If False, don't log a message if the task is destroyed whereas its
|
||||||
|
# status is still pending
|
||||||
|
self._log_destroy_pending = True
|
||||||
|
|
||||||
# On Python 3.3 or older, objects with a destructor part of a reference
|
# On Python 3.3 or older, objects with a destructor part of a reference
|
||||||
# cycle are never destroyed. It's not more the case on Python 3.4 thanks to
|
# cycle are never destroyed. It's not more the case on Python 3.4 thanks to
|
||||||
# the PEP 442.
|
# the PEP 442.
|
||||||
if _PY34:
|
if _PY34:
|
||||||
def __del__(self):
|
def __del__(self):
|
||||||
if self._state == futures._PENDING:
|
if self._state == futures._PENDING and self._log_destroy_pending:
|
||||||
context = {
|
context = {
|
||||||
'task': self,
|
'task': self,
|
||||||
'message': 'Task was destroyed but it is pending!',
|
'message': 'Task was destroyed but it is pending!',
|
||||||
|
|
|
@ -49,6 +49,9 @@ def run_briefly(loop):
|
||||||
pass
|
pass
|
||||||
gen = once()
|
gen = once()
|
||||||
t = tasks.Task(gen, loop=loop)
|
t = tasks.Task(gen, loop=loop)
|
||||||
|
# Don't log a warning if the task is not done after run_until_complete().
|
||||||
|
# It occurs if the loop is stopped or if a task raises a BaseException.
|
||||||
|
t._log_destroy_pending = False
|
||||||
try:
|
try:
|
||||||
loop.run_until_complete(t)
|
loop.run_until_complete(t)
|
||||||
finally:
|
finally:
|
||||||
|
|
Loading…
Reference in New Issue