Python 3 - 更快的打印& I / O

时间:2016-04-27 18:57:06

标签: python performance python-3.x file-io echo

我目前正在参与一个涉及处理海量数据的Python项目。在这里,我必须将大量数据打印到文件中。它们总是单行,但有时由数百万个数字组成。

Python中的实际数学运算最多只需几秒钟,几分钟。将它们打印到文件需要几个小时;我并不总是这样。

有没有办法加速I / O?
 从我的数据来看,数字存储在RAM中(或者至少我假设是这样,它是唯一占用11GB内存的东西),但Python不会立即将其打印到文本文件中。有没有办法将这些信息 - 如果是数字 - 转储到文件中?我已经尝试了任务管理器的转储,它给了我一个22GB的转储文件(是的,你看对了),它看起来不像我在那里寻找的东西,虽然它不是很清楚。

如果它有所不同,我有Python 3.5.1(Anaconda和Spyder),Windows 8.1 x64和16GB RAM。

顺便说一下,我在脚本里面运行Garbage Collect(gc模块),然后删除不需要的变量,所以11GB不仅仅是垃圾。

3 个答案:

答案 0 :(得分:0)

如果您确实受到编写文件所需的I / O限制,那么使用线程池的多线程可能会有所帮助。当然,这是有限制的,但至少,它允许您发出非阻塞文件写入。

答案 1 :(得分:0)

多线程可以加快速度(在你的内存中写入其他线程的打印机有一个队列)。

可能是系统设计的立足点,但也许可以评估是否需要将所有内容写入文件。也许考虑创建各种级别的日志记录,以便释放模式可以更快地运行(如果在您的上下文中这是有意义的)。

答案 2 :(得分:0)

使用HDF5文件格式

问题是,你必须写很多数据。

HDF5的格式非常有效,允许通过各种工具访问它。

准备迎接一些挑战:

  • HDF5有多个python包,你必须找到符合你需要的那个
  • 安装并不总是很简单(但可能有Windows安装二进制文件)
  • 希望通过一些研究来了解要存储的数据结构。
  • 它偶尔需要一些CPU周期 - 通常你会快速写入大量数据,并且必须将其刷新到磁盘。此时它开始压缩数据,这可能需要几秒钟。请参阅GIL for IO bounded thread in C extension (HDF5)

无论如何,我认为,很有可能,你会管理和更快地写入文件,你也会获得更小的文件,这些文件更容易处理。