Re: [PATCH] Work around performance bug in subprocess.Popen.communicate()
- From
- Catalin Marinas <catalin.marinas@gmail.com>
- Date
- Jul 31, 2009, 11:27 UTC
- Message-ID
- <b0943d9e0907310427r7e59aa5fi5e5ff5e3f3c03819@mail.gmail.com>
- In-Reply-To
- <20090731093632.7018.24435.stgit@october.e.vtech>
2009/7/31 Karl Wiberg <kha@virtutech.com>:
Show 11 quoted lines
> @@ -110,7 +110,9 @@ class Run:
> stdin = subprocess.PIPE,
> stdout = subprocess.PIPE,
> stderr = subprocess.PIPE)
> - outdata, errdata = p.communicate(self.__indata)
> + if self.__indata:
> + p.stdin.write(self.__indata)
> + outdata, errdata = p.communicate()
> self.exitcode = p.returncode
> except OSError, e:
> raise self.exc('%s failed: %s' % (self.__cmd[0], e))But can this not lead to a deadlock if the __indata is big? The stdout of the created process is only processed once the whole __indata is written. I thought communicate() was created to avoid this issue.
-- Catalin