STINNER Victor added the comment:

The PEP 446 partially fixes this issue. The issue #19764 should fix it 
completly. Since you are using Python 2, you should not wait until the issue is 
fixed, but work around it.

To workaround the issue: use you own lock around the creation of processes. 
Example:
---
lock = threading.Lock()
...

def run_command(...):
   with lock:
      proc = subprocess.Popen(...)
   return proc.communicate()
---

The problem is that a thread B may inherit the handle of a pipe from handle A 
because the pip is marked as inheritable, and the subprocess module must use 
CreateProcess() with bInheritHandles parameter set to True to be able to 
redirect stdout.

Said differently: the subprocess is not thread-safe, you have to use your own 
lock to workaround race conditions.

----------
nosy: +haypo, sbt

_______________________________________
Python tracker <rep...@bugs.python.org>
<http://bugs.python.org/issue12739>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe: 
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com

Reply via email to