您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python子流程模块比命令慢得多(不建议使用)

Python子流程模块比命令慢得多(不建议使用)

我希望subprocess比慢command。无意暗示这是脚本运行缓慢的 唯一 原因,您应该查看commands代码。少于100行,并且大部分工作委托给的函数os,其中许多直接取自c posix库(至少在posix系统中)。请注意,此commands操作仅适用于Unix,因此无需做任何额外的工作即可确保跨平台兼容性。

现在看看subprocess。有1500多行代码(全部为纯Python)执行各种检查以确保一致的跨平台行为。基于此,我希望subprocess运行速度比慢commands

我对这两个模块进行了计时,并且在相当基本的基础上,subprocess速度几乎是的两倍commands

>>> %timeit commands.getoutput('echo "foo" | cat')
100 loops, best of 3: 3.02 ms per loop
>>> %timeit subprocess.check_output('echo "foo" | cat', shell=True)
100 loops, best of 3: 5.76 ms per loop

Swiss提出了一些不错的改进,这些将有助于提高脚本的性能。但是,即使在应用它们之后,请注意,subprocess仍然 较慢。

>>> %timeit commands.getoutput('echo "foo" | cat')
100 loops, best of 3: 2.97 ms per loop
>>> %timeit Popen('cat', stdin=PIPE, stdout=PIPE).communicate('foo')[0]
100 loops, best of 3: 4.15 ms per loop

假设您连续多次执行上述命令,这将加起来,并至少解决了部分性能差异。

无论如何,我将您的问题解释为与subprocess和的相对性能有关command,而不是有关如何加快脚本的速度。对于后一个问题,瑞士人的答案更好。

python 2022/1/1 18:31:12 有504人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶