diff --git a/Lib/subprocess.py b/Lib/subprocess.py index e7f39fef062..e79e5fd614b 100644 --- a/Lib/subprocess.py +++ b/Lib/subprocess.py @@ -1601,7 +1601,7 @@ class Popen(object): selector.unregister(key.fileobj) key.fileobj.close() elif key.fileobj in (self.stdout, self.stderr): - data = os.read(key.fd, 4096) + data = os.read(key.fd, 32768) if not data: selector.unregister(key.fileobj) key.fileobj.close() diff --git a/Misc/NEWS b/Misc/NEWS index 633ef5040ea..f81db69a3ea 100644 --- a/Misc/NEWS +++ b/Misc/NEWS @@ -24,6 +24,10 @@ Library - Issue #19343: Expose FreeBSD-specific APIs in resource module. Original patch by Koobs. +- Issue #19929: Call os.read with 32768 within subprocess.Popen.communicate + rather than 4096 for efficiency. A microbenchmark shows Linux and OS X + both using ~50% less cpu time this way. + - Issue #19506: Use a memoryview to avoid a data copy when piping data to stdin within subprocess.Popen.communicate. 5-10% less cpu usage.