【Regarding Performance of a Python Script....】

Cameron Simpson cs at cskk.id.au
Sun Mar 1 22:13:51 EST 2020


On 28Feb2020 19:24, Kenzi <kenzi.sml at gmail.com> wrote:
> I have a question regarding a simple code snippet in Python:
>
>from subprocess import check_output
>for i in range(1024):
>    check_output(['/bin/bash', '-c', 'echo 42'], close_fds=True)
>
>*I wonder why running it in Python 3.7 is much faster than Python 2.7? *
>(Python 3.7 is still faster, after I used *xrange * in Python 2.7)

On a lot of UNIX systems you can use the strace command to inspect what 
is happening. I am personally surprised there's a significant difference 
between the Pythons because I'd expect the expense of invoking bash to 
dominate the cost here (consider using /bin/sh, which on many systems 
isn't bash but something smaller/faster for noninteractive shell 
scripting).

Write a script running just the check_output() call one, and strace it:

    strace python -c "from subprocess import check_output; check_output(['/bin/bash', '-c', 'echo 42'], close_fds=True)"

See if your 2 Pythons are doing something difference at the system call 
level.

Cheers,
Cameron Simpson <cs at cskk.id.au>


More information about the Python-list mailing list