python - python 3.3 与 fortran 77 相比的文件处理速度

标签 python io migration fortran legacy

这个问题很奇怪,我知道。

我有一个 Fortran 77 代码库,它大部分解析大型非二进制文件,对这些文件进行一些操作,然后进行大量文件写入。代码库不进行任何矩阵操作或数字运算。这个遗留代码是 fortran 语言,因为许多其他代码库确实需要严格的数字运算。这最初只是用 fortran 编写的,因为有 fortran 的知识。

我的建议是完全用 python(最有可能是 3.3)重写它。 Fortran 代码的维护和您想象的一样困难,测试也和您想象的一样糟糕。显然 python 在这里会有很大帮助。

在 python 中的文件处理速度方面是否有任何性能影响(甚至增益)?目前该系统的大部分运行时间都在读取/写入文件。

提前致谢

最佳答案

Python 标准库的 IO 部分是作为高效的 C 代码实现的,所以我看到了比例如更好的性能。 Java,尤其是在程序受 IO 限制(而不是 CPU 限制)的情况下。

回复:

Currently the majority of run time of this system is in reading/writing the files.

此外,如果您的逻辑将文件作为流处理,而不是将文件内容作为一个整体来处理,那么在迁移到 Python 时,如果您使用正确的工具来完成这项工作,您实际上可能会看到性能提升。基本上这个想法是以 block 的形式读取输入,处理 block 并立即将结果写入输出文件。这最大限度地减少了内存使用和延迟,尤其是当您的管道包含多个步骤时。 Python 生成器允许以非常干净、可读和简洁的方式编写这样的逻辑,这是您在 Fortran 或 C 中找不到的东西,至少不需要一些额外的努力来构建这样的抽象(即使这样您最终也会得到非常神奇和/或神秘的代码)。

参见 http://www.dabeaz.com/generators/ 关于使用生成器在 Python 中处理文件的非常好的文本。

此外,根据处理算法的性质和复杂性,您可能会发现 Python 中可用的其他抽象(例如 coroutines)或库(geventnumpy 等)将帮助您实现更好的整体性能,因为它更容易理解和重构代码。 (这当然适用于任何高级语言与低级语言的比较。)

另外,查看 PyPy :它可能在数字运算部分比 CPython 提供了(有时是显着的)性能提升,而您不需要任何额外的努力(并不是说您不能或不应该优化您的代码PyPy JIT 编译器 :)).

然后是 Cython这允许您编写普通的 Python 并将其与将直接转换为 C 代码的部分混合。这具有比 Fortran(和 C)更好的可维护性和可读性以及 C 的性能的优势,同时使您能够使用大多数(如果不是全部的话)高级 Python 构造,以及直接调用纯 Python 代码和纯C 代码/库(可能还有 Fortran 代码/库:http://www.sfu.ca/~mawerder/notes/calling_fortran_from_python.html)。您也可以只在 Cython 中编写代码的性能关键(CPU 绑定(bind))部分,然后直接从 Python 调用它。

关于python - python 3.3 与 fortran 77 相比的文件处理速度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19183172/

相关文章:

java - 让java与C++程序通信

django - 重命名 Django 模型字段

php - MySQL RENAME TABLE 语句如何工作/执行?

sharepoint - 迁移到 SP 2013 后,Wiki 页面完全空白

python - tf.layers.dense() 如何与更高暗淡的输入交互?

Python 格式化大值

java - BufferedWriter - 程序执行期间流过早关闭

c# - 文件被两个进程使用

python - tkinter 条目小部件的验证

python - 保存屏幕上打印的内容