在 Python 中有没有比使用该方法更有效或更快的subprocess.call
方法?我注意到一年前有一个关于这个的 SO 问题(Python 子进程模块比命令慢得多(已弃用)),除了由于 Python 删除了该替代方案而贬值了,所以我想看看这是否是现在唯一的,因此是最快的表示从 Python 中调用 shell 的命令。具体来说,我正在运行以下命令:
subprocess.call("foo",shell=True)
还是我应该使用os
?
谢谢。
在 Python 中有没有比使用该方法更有效或更快的subprocess.call
方法?我注意到一年前有一个关于这个的 SO 问题(Python 子进程模块比命令慢得多(已弃用)),除了由于 Python 删除了该替代方案而贬值了,所以我想看看这是否是现在唯一的,因此是最快的表示从 Python 中调用 shell 的命令。具体来说,我正在运行以下命令:
subprocess.call("foo",shell=True)
还是我应该使用os
?
谢谢。
可能不是。您可能可以稍微加快调用速度,但根据我的经验,最大的收获是只启动一次子进程,然后让它保持活动状态。
创建新进程是一项非常昂贵的操作,Python 无法真正降低成本。
因此,与其调用/bin/ls path...
100 次,不如创建一个从标准输入读取路径并返回所需输出而不退出的外部进程。
作为一个(悲伤的)例子:在ca。1997 年,我编写了一个包装器,使 Java 1 编译器的速度提高了 1000 倍,该包装器使 VM 保持活动状态,并在通过套接字接收选项后启动编译。这主要不是因为进程创建时间,还因为在那时和之前启动 Java VM 需要很长时间。
尝试使用 subprocess.Popen() 代替。它有许多优点。详情请参考