我准备了一个关于制作软件应用程序的项目。它完整且工作正常,但执行速度非常慢。我已经采取了几个代码块并对其进行了优化..
我试过psyco ..即我安装了psyco并在我的代码顶部添加了两行
import psyco
psyco.full()
不知道这是否是使用psyco的方式..如果这是错误的。请告诉我如何使用psyco ..因为我添加了这个并且没有发现任何改进..
我尝试过分析,我知道代码行需要时间,但这些代码行不能进一步优化,是不可避免的代码行。
我还考虑过使用python包重写'c'中的代码的选项..但是我总是在使用python的附加包时遇到非常糟糕的经验,这些包不是基本python的一部分..
我正在使用python 2.6和windows vista ..请告诉方法方法,以显着提高整个代码的执行速度..至少5倍...请..
我没有在方法中编写我的代码,你之间的方法很少......没有主要的..
是的,因为很少有人建议我是一个IO限制问题..因为我需要调用代码大约500次,这涉及打开和关闭每次调用至少2个文件..
这里打开.pm文件时,它有两列,我只需要第一列,所以我将整个第一列复制到列表中并将其传递给函数以获取其行号,然后打开其他列file以将该行号的元素放入列表...
这是我想要的任务......我想将第一列的元素加载到列表中是非常耗时的任何想法来纠正这个...
如何改善IO绑定瓶颈的性能
拼命寻求帮助
答案 0 :(得分:3)
如果可以切换到二进制文件格式,可以获得更好的性能。您的大多数代码都在进行解析和字符串操作。你正在做大量的字符串转换为浮点数,这比你想象的慢。
答案 1 :(得分:1)
只需调整代码,就不太可能看到5倍的性能差异。
首先,您应该考虑改进算法 - 您是否正在使用最佳的数据结构?也许在正确的位置使用dict
或set
可以加快您的代码速度。
编写C模块并不是那么难,如果你找不到改进Python代码的方法,那么这是另一个选择。通常使用C代码可以将速度提高5倍以上。
也许你的问题是IO绑定的。然后,您需要了解提高IO性能的方法
如果您需要更多帮助,您可能需要显示一些代码或至少描述您的程序的功能。
更新: 看起来你正在打开和关闭许多文件,这些文件在Windows上往往会非常缓慢。
答案 2 :(得分:0)
psyco可以像导入一样简单并调用psyco.full()。所以你对你的psyco用法是正确的。
如果您正在尝试使用C / C ++构建python模块,请查看boost :: python
您应该发布您的代码以供进一步分析。
答案 3 :(得分:0)
要优化代码以提高速度,您只需对其进行分析并查看问题所在。猜测没有帮助。但是一旦你知道在哪里,你的降压通常来自那些降序:改进算法,使用更合适的数据结构,消除资源瓶颈(io,内存,cpu),减少内存分配,减少上下文切换(进程和子程序)。
答案 4 :(得分:0)
以下是优化的一个机会:您使用非常相似的参数调用get_list两次:
join_cost_index_end[index] = get_list(file, float(abs1), fout)
join_cost_index_strt[index] = get_list(file, float(abs2), fout)
这意味着get_list中的大部分工作都是在没有充分理由的情况下完成两次。重写它以便get_list被调用一次,并让它同时返回index_end和index_strt。
答案 5 :(得分:0)
为什么bot只是尝试使用cython?你应该在不改变任何代码的情况下获得更好的性能。通过一些修改,这应该会有所帮助。