快速响应命令行脚本

2024-09-30 08:18:14 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

例如,Mercurial在0.080scs左右,GIT在0.030scs左右

我已经研究过Mercurial的源代码(毕竟是Python),但是我仍然无法找到一个快速响应脚本的答案。在

我认为imports以及你如何管理它们是最初减速的一个重要原因。但是,在Python中,有没有一个快速执行、快速响应的命令行脚本的最佳实践呢?在

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

这比运行git慢5倍!在

编辑:

我不应该提到git,因为它是用C编写的,但是它的多变部分仍然存在,不,pyc不觉得有什么大的改进(至少对我来说)。在

编辑2:

虽然惰性导入是Mercurial加速的关键,但它们对慢进口起着关键作用 常规Python脚本中没有自动生成的带有pkg_resources的脚本,例如:

from pkg_resources import load_entry_point

如果您手动生成了不使用pkg_资源的脚本,那么速度至少会提高2倍。在

但是!请注意,pkg_资源确实提供了一种很好的版本依赖性方法,因此请确保您意识到不使用它基本上意味着可能的版本冲突。在


Tags: 工具命令行git版本脚本编辑菜单pkg
2条回答

我很抱歉-但肯定不是0.08秒打扰了你。尽管你不这么说,但感觉你在运行一个“outter”shell(或其他语言)scritp,它在一个循环中调用几百个Python脚本- 这是这些创业时期唯一能起作用的方法。所以,要么在你的问题中隐瞒了这个重要的信息,要么你的父亲是this guy。在

假设你需要一个外部的python脚本,然后按照同样的顺序来编写python脚本。因此,您将减少解释程序启动和每个脚本执行的模块导入。在

例如,这甚至适用于mercurial。您可以导入“mercurial”和相应的子模块,并在其中调用执行与等效命令行参数相同操作的函数

除了编译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,您将发现启动时间大大增加。在我的机器上,它大概是原来的两倍。在

我建议学习需求端口.py看看如何在自己的项目中应用类似的技术。在

p.S.Git,我相信你知道的,是用C语言编写的,所以我并不惊讶它的启动时间很快。在

相关问题 更多 >

    热门问题