component/python-2.7: Lib/subprocess: Speedup close_fds=True
@romain reports that Popen(close_fds=True) is slow on py2. Let's semantically backport from py3 how to close only actually opened file descriptors instead of whole 3..`ulimit -n` range. Attached test benchmark shows the following results with `ulimit -n`=65K: Before this patch: $ ./bin/python2.7 ~/x.py close_fds=False: 0.001251 s/call 0.001337 s/call 0.001486 s/call close_fds=True: 0.017973 s/call 0.018152 s/call 0.018204 s/call After the patch: $ ./bin/python2.7 ~/x.py close_fds=False: 0.001391 s/call 0.001416 s/call 0.001570 s/call close_fds=True: 0.001469 s/call 0.001479 s/call 0.001491 s/call i.e. ~12x speedup. References on this subject are in the patch itself. The test benchmark is below: ---- 8< ---- import timeit from subprocess import check_call def f(): check_call(['true'], close_fds=False) def g(): check_call(['true'], close_fds=True) N=3 n=100 print 'close_fds=False:' for i in range(N): print '%.6f s/call' % (timeit.timeit(f, number=n) / n) print print 'close_fds=True:' for i in range(N): print '%.6f s/call' % (timeit.timeit(g, number=n) / n) /helped-by @jm
Showing