繁体   English   中英

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

[英]Python 3 - Faster Print & I/O

我目前正在参与一个Python项目,该项目涉及处理大量数据。 在这种情况下,我必须将大量数据打印到文件中。 它们始终是一线,但有时包含数百万个数字。

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

有什么办法可以加速I / O吗?
根据我的判断,数字存储在RAM中(或者至少我认为是,这是唯一会占用11GB RAM的东西),但是Python不会立即将其打印到文本文件中。 是否可以将信息(如果是数字)转储到文件中? 我尝试了任务管理器的转储,该转储给了我22GB的转储文件(是的,您没看错),尽管那里不是很清楚,但看起来好像我在找什么。

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

顺便说一句,我确实在脚本中运行了垃圾收集(gc模块),并且删除了不需要的变量,因此这11GB不仅仅是垃圾。

如果确实受写文件时间限制的I / O,则具有线程池的多线程可能会有所帮助。 当然,有一个限制,但是至少,它将允许您发出非阻塞文件写入。

多线程可以加快速度(将打印机写入要写入队列的其他线程)。

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

使用HDF5文件格式

问题是,您必须写入大量数据。

HDF5是一种格式非常有效的格式,并允许通过各种工具对其进行访问。

准备应对一些挑战:

  • HDF5有多个python软件包,您将必须找到一个适合您需求的软件包
  • 安装并不总是很简单(但是可能会有Windows安装二进制文件)
  • 希望进行一些研究以了解要存储的数据结构。
  • 它有时会需要一些CPU周期-通常您会快速写入大量数据,并且一时必须将其刷新到磁盘。 此时,它开始压缩数据可能需要几秒钟。 有关C扩展(HDF5)中IO绑定线程的信息,请参见GIL

无论如何,我认为您很有可能会进行管理,并且对文件的快速写入之外,您还将获得较小的文件,这些文件更易于处理。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM