-1

我准备了一个关于制作软件应用程序的项目。除了执行速度很慢之外,它是完整的并且工作正常。我已经采取了几块代码并对其进行了优化..

我尝试了 psyco .. 即我安装了 psyco 并在我的代码顶部添加了两行

import psyco
psyco.full()

不知道这是否是使用 psyco 的方式。如果这是错误的。请告诉我如何使用 psyco.. 因为我添加了这个并没有发现任何改进..

我已经尝试过分析,我知道代码行需要时间,但这些无法进一步优化并且是不可避免的代码行。

我还考虑过使用一些python包重写'c'中的代码的选项。但是在使用不属于基本python的附加python包时,我总是有一个非常糟糕的体验。

我正在使用python 2.6和windows vista ..请告诉方法显着提高整个代码执行速度的方法..至少5倍..拜托..

我还没有在方法中编写我的代码,你之间几乎没有方法..没有主要..

是的,因为很少有人建议我是一个 IO 绑定问题.. 因为我需要调用代码大约 500 次,这涉及每次调用打开和关闭至少 2 个文件..

在这里打开 .pm 文件时,它有两列,我只需要第一列,所以我将整个第一列复制到列表中并将其传递给函数以获取其行号,然后打开其他文件以获取该行号的元素到列表中...

这是我想要的任务......我想将第一列的元素加载到列表中是耗时的任何想法来纠正这个......

如何提高 IO 绑定瓶颈的性能

拼命寻求帮助

4

6 回答 6

3

如果您可以切换到二进制文件格式,您可以获得更好的性能。您的大部分代码都在进行解析和字符串操作。您正在将字符串转换为浮点数,这比您想象的要慢。

于 2010-06-22T06:29:16.243 回答
1

通过调整代码,您不太可能看到 5 倍的性能差异。

首先你应该考虑改进你的算法——你是否使用了最好的数据结构来完成这项工作?也许在正确的地方使用 adict或 aset可以大大加快您的代码速度。

编写 C 模块并不难,如果您找不到改进 Python 代码的方法,这是另一种选择。通常,您会期望使用 C 代码可以将速度提高 5 倍以上。

也许你的问题是 IO 绑定的。那你需要看看提高IO性能的方法

如果您在这里需要更多帮助,您可能需要展示一些代码或至少描述您的程序的功能。

更新:看起来您正在打开和关闭许多文件,这些文件在 Windows 上往往非常缓慢。

于 2010-06-22T05:23:30.623 回答
0

psyco 可以像导入和调用 psyco.full() 一样简单地使用。所以你对你的 psyco 使用是正确的。

如果您尝试使用 C/C++ 构建 python 模块,请查看 boost::python

您真的应该发布您的代码以进行进一步分析。

于 2010-06-22T05:18:26.460 回答
0

要优化代码以提高速度,您只需对其进行分析并查看问题所在。猜测没有帮助。但是一旦你知道在哪里,最划算的通常来自降序排列:改进算法、使用更合适的数据结构、消除资源瓶颈(io、内存、cpu)、减少内存分配、减少上下文切换(进程和子程序)。

于 2010-06-22T05:25:58.237 回答
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。

于 2010-06-22T06:17:35.723 回答
0

为什么机器人只是尝试使用 cython?您应该在不更改任何代码的情况下获得更好的性能。稍作修改,这应该会有所帮助。

于 2010-06-22T06:53:54.540 回答