gpt4 book ai didi

python - 快速响应的命令行脚本

转载 作者:太空狗 更新时间:2023-10-30 02:23:20 25 4
gpt4 key购买 nike

我编写命令行 Python 脚本已有一段时间了,但最近我对速度感到非常沮丧。

我不一定是在谈论处理速度、调度任务或其他命令行工具特定的过程(这通常是设计/实现问题),而是我在谈论简单地运行一个工具来获得帮助菜单, 或显示最少的信息。

例如,Mercurial 约为 0.080scs,GIT 约为 0.030scs

我已经查看了 Mercurial 的源代码(毕竟它是 Python),但我仍然无法找到快速响应脚本的答案。

我认为 imports 以及您如何管理它们是最初速度变慢的一个重要原因。但是,在 Python 中是否存在快速响应的快速命令行脚本的最佳实践?

导入 os 和 optparse 并执行 main() 来解析一些参数选项的单个 Python 脚本在我的机器上需要 0.160scs 才能显示帮助菜单...

这比只运行 git 慢 5 倍!

编辑:

我不应该提到 git,因为它是用 C 编写的。但是 Mercurial 部分仍然存在,不,pyc 感觉不是很大的改进(至少对我而言)。

编辑 2:

虽然惰性导入是 Mercurial 加速的关键,但它们关键导致 Mercurial 运行缓慢常规 Python 脚本没有包含 pkg_resources 的自动生成脚本,例如:

from pkg_resources import load_entry_point

如果您手动生成了不使用 pkg_resources 的脚本,您应该会看到至少 2 倍的速度提升。

但是!请注意,pkg_resources 确实提供了一种很好的版本依赖关系方式,因此请确保您知道不使用它基本上意味着可能存在版本冲突。

最佳答案

除了编译 Python 文件之外,Mercurial 将导入修改为按需导入,这确实减少了启动时间。它在 demandimport 模块中将 __builtin__.__import__ 设置为它自己的导入函数。

如果您查看/usr/lib/(或您机器上的任何位置)中的 hg 脚本,您可以在以下几行中亲眼看到:

try:
from mercurial import demandimport; demandimport.enable()
except ImportError:
import sys
sys.stderr.write("abort: couldn't find mercurial libraries in [%s]\n" %
' '.join(sys.path))
sys.stderr.write("(check your install and PYTHONPATH)\n")
sys.exit(-1)

如果将 demandimport 行更改为 pass,您会发现启动时间大幅增加。在我的机器上,它似乎大约翻了一番。

我建议学习 demandimport.py 以了解如何在您自己的项目中应用类似的技术。

附言Git,我相信您知道,它是用 C 语言编写的,所以我对它的快速启动并不感到惊讶。

关于python - 快速响应的命令行脚本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4476125/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com