[Python-checkins] r84884 - in python/branches/release31-maint: Lib/test/test_subprocess.py
antoine.pitrou
python-checkins at python.org
Sun Sep 19 00:40:56 CEST 2010
Author: antoine.pitrou
Date: Sun Sep 19 00:40:56 2010
New Revision: 84884
Log:
Merged revisions 84883 via svnmerge from
svn+ssh://pythondev@svn.python.org/python/branches/py3k
........
r84883 | antoine.pitrou | 2010-09-19 00:38:48 +0200 (dim., 19 sept. 2010) | 3 lines
Issue #9895: speed up test_subprocess
........
Modified:
python/branches/release31-maint/ (props changed)
python/branches/release31-maint/Lib/test/test_subprocess.py
Modified: python/branches/release31-maint/Lib/test/test_subprocess.py
==============================================================================
--- python/branches/release31-maint/Lib/test/test_subprocess.py (original)
+++ python/branches/release31-maint/Lib/test/test_subprocess.py Sun Sep 19 00:40:56 2010
@@ -445,21 +445,40 @@
def test_no_leaking(self):
# Make sure we leak no resources
- if (not hasattr(support, "is_resource_enabled") or
- support.is_resource_enabled("subprocess") and not mswindows):
+ if not mswindows:
max_handles = 1026 # too much for most UNIX systems
else:
- max_handles = 65
- for i in range(max_handles):
- p = subprocess.Popen([sys.executable, "-c",
- "import sys;"
- "sys.stdout.write(sys.stdin.read())"],
- stdin=subprocess.PIPE,
- stdout=subprocess.PIPE,
- stderr=subprocess.PIPE)
- data = p.communicate(b"lime")[0]
- self.assertEqual(data, b"lime")
-
+ max_handles = 2050 # too much for (at least some) Windows setups
+ handles = []
+ try:
+ for i in range(max_handles):
+ try:
+ handles.append(os.open(support.TESTFN,
+ os.O_WRONLY | os.O_CREAT))
+ except OSError as e:
+ if e.errno != errno.EMFILE:
+ raise
+ break
+ else:
+ self.skipTest("failed to reach the file descriptor limit "
+ "(tried %d)" % max_handles)
+ # Close a couple of them (should be enough for a subprocess)
+ for i in range(10):
+ os.close(handles.pop())
+ # Loop creating some subprocesses. If one of them leaks some fds,
+ # the next loop iteration will fail by reaching the max fd limit.
+ for i in range(15):
+ p = subprocess.Popen([sys.executable, "-c",
+ "import sys;"
+ "sys.stdout.write(sys.stdin.read())"],
+ stdin=subprocess.PIPE,
+ stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ data = p.communicate(b"lime")[0]
+ self.assertEqual(data, b"lime")
+ finally:
+ for h in handles:
+ os.close(h)
def test_list2cmdline(self):
self.assertEqual(subprocess.list2cmdline(['a b c', 'd', 'e']),
More information about the Python-checkins
mailing list