mirror of
https://github.com/python/cpython.git
synced 2025-10-28 01:00:34 +00:00
asyncio: Add Transport.is_closing()
See https://github.com/python/asyncio/pull/291 for details.
This commit is contained in:
parent
da32d26ab9
commit
5bb1afb332
11 changed files with 36 additions and 14 deletions
|
|
@ -87,6 +87,9 @@ class BaseSubprocessTransport(transports.SubprocessTransport):
|
|||
def _start(self, args, shell, stdin, stdout, stderr, bufsize, **kwargs):
|
||||
raise NotImplementedError
|
||||
|
||||
def is_closing(self):
|
||||
return self._closed
|
||||
|
||||
def close(self):
|
||||
if self._closed:
|
||||
return
|
||||
|
|
|
|||
|
|
@ -65,6 +65,9 @@ class _ProactorBasePipeTransport(transports._FlowControlMixin,
|
|||
def _set_extra(self, sock):
|
||||
self._extra['pipe'] = sock
|
||||
|
||||
def is_closing(self):
|
||||
return self._closing
|
||||
|
||||
def close(self):
|
||||
if self._closing:
|
||||
return
|
||||
|
|
|
|||
|
|
@ -556,6 +556,9 @@ class _SelectorTransport(transports._FlowControlMixin,
|
|||
def abort(self):
|
||||
self._force_close(None)
|
||||
|
||||
def is_closing(self):
|
||||
return self._closing
|
||||
|
||||
def close(self):
|
||||
if self._closing:
|
||||
return
|
||||
|
|
|
|||
|
|
@ -304,6 +304,9 @@ class _SSLProtocolTransport(transports._FlowControlMixin,
|
|||
"""Get optional transport information."""
|
||||
return self._ssl_protocol._get_extra_info(name, default)
|
||||
|
||||
def is_closing(self):
|
||||
return self._closed
|
||||
|
||||
def close(self):
|
||||
"""Close the transport.
|
||||
|
||||
|
|
|
|||
|
|
@ -302,7 +302,7 @@ class StreamWriter:
|
|||
if exc is not None:
|
||||
raise exc
|
||||
if self._transport is not None:
|
||||
if self._transport._closing:
|
||||
if self._transport.is_closing():
|
||||
# Yield to the event loop so connection_lost() may be
|
||||
# called. Without this, _drain_helper() would return
|
||||
# immediately, and code that calls
|
||||
|
|
|
|||
|
|
@ -19,6 +19,10 @@ class BaseTransport:
|
|||
"""Get optional transport information."""
|
||||
return self._extra.get(name, default)
|
||||
|
||||
def is_closing(self):
|
||||
"""Return True if the transport is closing or closed."""
|
||||
raise NotImplementedError
|
||||
|
||||
def close(self):
|
||||
"""Close the transport.
|
||||
|
||||
|
|
|
|||
|
|
@ -364,6 +364,9 @@ class _UnixReadPipeTransport(transports.ReadTransport):
|
|||
def resume_reading(self):
|
||||
self._loop.add_reader(self._fileno, self._read_ready)
|
||||
|
||||
def is_closing(self):
|
||||
return self._closing
|
||||
|
||||
def close(self):
|
||||
if not self._closing:
|
||||
self._close(None)
|
||||
|
|
@ -548,6 +551,9 @@ class _UnixWritePipeTransport(transports._FlowControlMixin,
|
|||
self._loop.remove_reader(self._fileno)
|
||||
self._loop.call_soon(self._call_connection_lost, None)
|
||||
|
||||
def is_closing(self):
|
||||
return self._closing
|
||||
|
||||
def close(self):
|
||||
if self._pipe is not None and not self._closing:
|
||||
# write_eof is all what we needed to close the write pipe
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue