如何提升性能?
我之前准备了一个软件应用项目。这个项目已经完成并且运行得很好,只是执行速度非常慢。我对几个代码块进行了优化。
我尝试使用了psyco,也就是我安装了psyco,并在我的代码顶部添加了两行代码:
import psyco
psyco.full()
我不知道这样使用psyco是否正确。如果不对,请告诉我怎么用psyco,因为我添加了这些代码后没有发现任何改进。
我也尝试过性能分析,知道哪些代码行耗时,但这些代码无法进一步优化,是不可避免的。
我还考虑过用'C'语言重写代码,借助一些Python的包,但我在使用那些不是基本Python的一些额外包时,总是遇到很糟糕的体验。
我现在使用的是Python 2.6和Windows Vista。请告诉我一些方法,能显著提高整个代码的执行速度,至少提高5倍。
我的代码没有写成方法,虽然中间有几个方法,但没有主函数。
是的,正如一些人所说,我的问题是IO瓶颈,因为我需要调用代码大约500次,每次调用都涉及打开和关闭至少两个文件。
在这里,当我打开一个.pm文件时,它有两列,我只需要第一列,所以我把整个第一列复制到一个列表中,然后传递给一个函数来获取它的行号,再打开另一个文件,把那个行号的元素放到一个列表里……
这就是我想要完成的任务……我想加载第一列的元素到列表中是耗时的,有什么办法可以解决这个问题吗?
我该如何改善IO瓶颈的性能呢?
我非常需要帮助。
6 个回答
psyco的使用非常简单,只需要导入它,然后调用psyco.full()就可以了。所以你对psyco的使用是正确的。
如果你想用C/C++来构建一个Python模块,可以看看boost::python这个工具。
你最好把你的代码贴出来,这样大家可以更好地分析。
单靠调整代码,你很难看到性能提升五倍的效果。
首先,你应该考虑改进你的算法——你是否在使用最合适的数据结构?比如在合适的地方使用 dict
或 set
,可能会让你的代码运行得更快。
写一个C语言模块其实并不难,如果你找不到办法来优化Python代码,这也是一个选择。通常情况下,使用C语言代码的速度提升会超过五倍。
也有可能你的问题是因为输入输出(IO)速度慢。那你就需要想办法提高IO的性能。
如果你想要更多的帮助,可能需要展示一些代码,或者至少描述一下你的程序是做什么的。
更新:看起来你在打开和关闭很多文件,而这在Windows上通常会非常慢。
如果你能换成二进制文件格式,性能会好很多。你大部分的代码都在处理解析和字符串操作。你在做很多字符串转浮点数的工作,这比你想象的要慢。