diff options
author | Andrew Svetlov <andrew.svetlov@gmail.com> | 2019-09-13 12:18:46 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2019-09-13 12:18:46 (GMT) |
commit | 9eb35ab0d71a6bd680e84fa0f828cb634e72b681 (patch) | |
tree | 7f088d5fc06a77bb0450d33a06242e8a32c92794 | |
parent | ff2e18286560e981f4e09afb0d2448ea994414d8 (diff) | |
download | cpython-9eb35ab0d71a6bd680e84fa0f828cb634e72b681.zip cpython-9eb35ab0d71a6bd680e84fa0f828cb634e72b681.tar.gz cpython-9eb35ab0d71a6bd680e84fa0f828cb634e72b681.tar.bz2 |
bpo-38148: Add slots to asyncio transports (GH-16077)
* bpo-38148: Add slots to asyncio transports
* Update Misc/NEWS.d/next/Library/2019-09-13-08-55-43.bpo-38148.Lnww6D.rst
Co-Authored-By: Kyle Stanley <aeros167@gmail.com>
-rw-r--r-- | Lib/asyncio/transports.py | 14 | ||||
-rw-r--r-- | Lib/test/test_asyncio/test_transports.py | 13 | ||||
-rw-r--r-- | Misc/NEWS.d/next/Library/2019-09-13-08-55-43.bpo-38148.Lnww6D.rst | 1 |
3 files changed, 24 insertions, 4 deletions
diff --git a/Lib/asyncio/transports.py b/Lib/asyncio/transports.py index 47b37fa..513b1c0 100644 --- a/Lib/asyncio/transports.py +++ b/Lib/asyncio/transports.py @@ -9,6 +9,8 @@ __all__ = ( class BaseTransport: """Base class for transports.""" + __slots__ = ('_extra',) + def __init__(self, extra=None): if extra is None: extra = {} @@ -44,6 +46,8 @@ class BaseTransport: class ReadTransport(BaseTransport): """Interface for read-only transports.""" + __slots__ = () + def is_reading(self): """Return True if the transport is receiving.""" raise NotImplementedError @@ -68,6 +72,8 @@ class ReadTransport(BaseTransport): class WriteTransport(BaseTransport): """Interface for write-only transports.""" + __slots__ = () + def set_write_buffer_limits(self, high=None, low=None): """Set the high- and low-water limits for write flow control. @@ -154,10 +160,14 @@ class Transport(ReadTransport, WriteTransport): except writelines(), which calls write() in a loop. """ + __slots__ = () + class DatagramTransport(BaseTransport): """Interface for datagram (UDP) transports.""" + __slots__ = () + def sendto(self, data, addr=None): """Send data to the transport. @@ -180,6 +190,8 @@ class DatagramTransport(BaseTransport): class SubprocessTransport(BaseTransport): + __slots__ = () + def get_pid(self): """Get subprocess id.""" raise NotImplementedError @@ -247,6 +259,8 @@ class _FlowControlMixin(Transport): resume_writing() may be called. """ + __slots__ = ('_loop', '_protocol_paused', '_high_water', '_low_water') + def __init__(self, extra=None, loop=None): super().__init__(extra) assert loop is not None diff --git a/Lib/test/test_asyncio/test_transports.py b/Lib/test/test_asyncio/test_transports.py index 7de9b3e..df44855 100644 --- a/Lib/test/test_asyncio/test_transports.py +++ b/Lib/test/test_asyncio/test_transports.py @@ -22,14 +22,19 @@ class TransportTests(unittest.TestCase): self.assertIs(default, transport.get_extra_info('unknown', default)) def test_writelines(self): - transport = asyncio.Transport() - transport.write = mock.Mock() + writer = mock.Mock() + + class MyTransport(asyncio.Transport): + def write(self, data): + writer(data) + + transport = MyTransport() transport.writelines([b'line1', bytearray(b'line2'), memoryview(b'line3')]) - self.assertEqual(1, transport.write.call_count) - transport.write.assert_called_with(b'line1line2line3') + self.assertEqual(1, writer.call_count) + writer.assert_called_with(b'line1line2line3') def test_not_implemented(self): transport = asyncio.Transport() diff --git a/Misc/NEWS.d/next/Library/2019-09-13-08-55-43.bpo-38148.Lnww6D.rst b/Misc/NEWS.d/next/Library/2019-09-13-08-55-43.bpo-38148.Lnww6D.rst new file mode 100644 index 0000000..88c0809 --- /dev/null +++ b/Misc/NEWS.d/next/Library/2019-09-13-08-55-43.bpo-38148.Lnww6D.rst @@ -0,0 +1 @@ +Add slots to :mod:`asyncio` transport classes, which can reduce memory usage. |