asyncio: sync with Tulip

* _WaitHandleFuture.cancel() now notify IocpProactor through the overlapped
  object that the wait was cancelled.
* Optimize IocpProactor.wait_for_handle() gets the result if the wait is
  signaled immediatly.
* Enhance representation of Future and Future subclasses

  - Add "created at filename:lineno" in the representation
  - Add Future._repr_info() method which can be more easily overriden than
    Future.__repr__(). It should now be more easy to enhance Future
    representation without having to modify each subclass. For example,
    _OverlappedFuture and _WaitHandleFuture get the new "created at" information.
  - Use reprlib to format Future result, and function arguments when formatting a
    callback, to limit the length of the representation.

* Fix repr(_WaitHandleFuture)
* _WaitHandleFuture and _OverlappedFuture: hide frames of internal calls in the
  source traceback.
* Cleanup ProactorIocp._poll(): set the timeout to 0 after the first call to
  GetQueuedCompletionStatus()
* test_locks: close the temporary event loop and check the condition lock
* Remove workaround in test_futures, no more needed
This commit is contained in:
Victor Stinner 2014-07-29 12:58:23 +02:00
parent 7eca7343a0
commit 313a980904
7 changed files with 108 additions and 72 deletions

View file

@ -10,11 +10,12 @@ __all__ = ['AbstractEventLoopPolicy',
import functools
import inspect
import subprocess
import traceback
import threading
import reprlib
import socket
import subprocess
import sys
import threading
import traceback
_PY34 = sys.version_info >= (3, 4)
@ -36,8 +37,12 @@ def _get_function_source(func):
def _format_args(args):
# function formatting ('hello',) as ('hello')
args_repr = repr(args)
"""Format function arguments.
Special case for a single parameter: ('hello',) is formatted as ('hello').
"""
# use reprlib to limit the length of the output
args_repr = reprlib.repr(args)
if len(args) == 1 and args_repr.endswith(',)'):
args_repr = args_repr[:-2] + ')'
return args_repr