asyncio: sync with Tulip

* _UnixSubprocessTransport: fix file mode of stdin. Open stdin in write mode,
  not in read mode
* Examples: close the event loop at exit
* More reliable CoroWrapper.__del__. If the constructor is interrupted by
  KeyboardInterrupt or the coroutine objet is destroyed lately, some the
  _source_traceback attribute doesn't exist anymore.
* repr(Task): include also the future the task is waiting for
This commit is contained in:
Victor Stinner 2014-07-03 00:59:00 +02:00
parent e10920f0d1
commit 2dba23af71
4 changed files with 23 additions and 7 deletions

View file

@ -111,12 +111,14 @@ class CoroWrapper:
frame = getattr(gen, 'gi_frame', None)
if frame is not None and frame.f_lasti == -1:
func = events._format_callback(self.func, ())
tb = ''.join(traceback.format_list(self._source_traceback))
message = ('Coroutine %s was never yielded from\n'
'Coroutine object created at (most recent call last):\n'
'%s'
% (func, tb.rstrip()))
logger.error(message)
msg = 'Coroutine %s was never yielded from' % func
tb = getattr(self, '_source_traceback', ())
if tb:
tb = ''.join(traceback.format_list(tb))
msg += ('\nCoroutine object created at '
'(most recent call last):\n')
msg += tb.rstrip()
logger.error(msg)
def coroutine(func):

View file

@ -109,6 +109,9 @@ class Task(futures.Future):
if self._callbacks:
info.append(self._format_callbacks())
if self._fut_waiter is not None:
info.append('wait_for=%r' % self._fut_waiter)
return '<%s %s>' % (self.__class__.__name__, ' '.join(info))
def get_stack(self, *, limit=None):

View file

@ -494,7 +494,7 @@ class _UnixSubprocessTransport(base_subprocess.BaseSubprocessTransport):
universal_newlines=False, bufsize=bufsize, **kwargs)
if stdin_w is not None:
stdin.close()
self._proc.stdin = open(stdin_w.detach(), 'rb', buffering=bufsize)
self._proc.stdin = open(stdin_w.detach(), 'wb', buffering=bufsize)
class AbstractChildWatcher: