summaryrefslogtreecommitdiffstats
path: root/Lib/asyncio
diff options
context:
space:
mode:
authorGuido van Rossum <guido@python.org>2013-12-03 02:36:30 (GMT)
committerGuido van Rossum <guido@python.org>2013-12-03 02:36:30 (GMT)
commitf10345e1026c087d0e2cba7187a94df769b55e62 (patch)
tree129acc43ee33d29c6b22f44fc1fd1271f25887c4 /Lib/asyncio
parentafbf827875dc2fb0cb603b03fe8f79c8ac1e30af (diff)
downloadcpython-f10345e1026c087d0e2cba7187a94df769b55e62.zip
cpython-f10345e1026c087d0e2cba7187a94df769b55e62.tar.gz
cpython-f10345e1026c087d0e2cba7187a94df769b55e62.tar.bz2
asyncio: Improve default writelines().
Diffstat (limited to 'Lib/asyncio')
-rw-r--r--Lib/asyncio/transports.py16
1 files changed, 12 insertions, 4 deletions
diff --git a/Lib/asyncio/transports.py b/Lib/asyncio/transports.py
index 86b850e..c2feb93 100644
--- a/Lib/asyncio/transports.py
+++ b/Lib/asyncio/transports.py
@@ -1,5 +1,9 @@
"""Abstract Transport class."""
+import sys
+
+PY34 = sys.version_info >= (3, 4)
+
__all__ = ['ReadTransport', 'WriteTransport', 'Transport']
@@ -85,11 +89,15 @@ class WriteTransport(BaseTransport):
def writelines(self, list_of_data):
"""Write a list (or any iterable) of data bytes to the transport.
- The default implementation just calls write() for each item in
- the list/iterable.
+ The default implementation concatenates the arguments and
+ calls write() on the result.
"""
- for data in list_of_data:
- self.write(data)
+ if not PY34:
+ # In Python 3.3, bytes.join() doesn't handle memoryview.
+ list_of_data = (
+ bytes(data) if isinstance(data, memoryview) else data
+ for data in list_of_data)
+ self.write(b''.join(list_of_data))
def write_eof(self):
"""Close the write end after flushing buffered data.