From: Gregory P. Smith Date: Sun, 8 Dec 2013 03:12:46 +0000 (-0800) Subject: Fixes issue #19506: Use a memoryview to avoid a data copy when piping data X-Git-Tag: v3.4.0b2~302^2 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=774f909489ca1395ba1e3f3a1f3d43495df6cdfe;p=thirdparty%2FPython%2Fcpython.git Fixes issue #19506: Use a memoryview to avoid a data copy when piping data to stdin within subprocess.Popen.communicate. 5-10% less cpu usage. --- diff --git a/Lib/subprocess.py b/Lib/subprocess.py index c3a278836c19..546a7a0fcda8 100644 --- a/Lib/subprocess.py +++ b/Lib/subprocess.py @@ -1621,6 +1621,9 @@ class Popen(object): self._save_input(input) + if self._input: + input_view = memoryview(self._input) + while self._fd2file: timeout = self._remaining_time(endtime) if timeout is not None and timeout < 0: @@ -1638,8 +1641,8 @@ class Popen(object): for fd, mode in ready: if mode & select.POLLOUT: - chunk = self._input[self._input_offset : - self._input_offset + _PIPE_BUF] + chunk = input_view[self._input_offset : + self._input_offset + _PIPE_BUF] try: self._input_offset += os.write(fd, chunk) except OSError as e: diff --git a/Misc/NEWS b/Misc/NEWS index 623e1fe6b97a..706446072032 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -18,6 +18,9 @@ Core and Builtins Library ------- +- Issue #19506: Use a memoryview to avoid a data copy when piping data + to stdin within subprocess.Popen.communicate. 5-10% less cpu usage. + - Issue #19839: Fix regression in bz2 module's handling of non-bzip2 data at EOF, and analogous bug in lzma module.