我目前正在参与一个涉及处理海量数据的Python项目。在这里,我必须将大量数据打印到文件中。它们总是单行,但有时由数百万个数字组成。
Python中的实际数学运算最多只需几秒钟,几分钟。将它们打印到文件需要几个小时;我并不总是这样。
有没有办法加速I / O?
从我的数据来看,数字存储在RAM中(或者至少我假设是这样,它是唯一占用11GB内存的东西),但Python不会立即将其打印到文本文件中。有没有办法将这些信息 - 如果是数字 - 转储到文件中?我已经尝试了任务管理器的转储,它给了我一个22GB的转储文件(是的,你看对了),它看起来不像我在那里寻找的东西,虽然它不是很清楚。
如果它有所不同,我有Python 3.5.1(Anaconda和Spyder),Windows 8.1 x64和16GB RAM。
顺便说一下,我在脚本里面运行Garbage Collect(gc模块),然后删除不需要的变量,所以11GB不仅仅是垃圾。
答案 0 :(得分:0)
如果您确实受到编写文件所需的I / O限制,那么使用线程池的多线程可能会有所帮助。当然,这是有限制的,但至少,它允许您发出非阻塞文件写入。
答案 1 :(得分:0)
多线程可以加快速度(在你的内存中写入其他线程的打印机有一个队列)。
可能是系统设计的立足点,但也许可以评估是否需要将所有内容写入文件。也许考虑创建各种级别的日志记录,以便释放模式可以更快地运行(如果在您的上下文中这是有意义的)。
答案 2 :(得分:0)
问题是,你必须写很多数据。
HDF5的格式非常有效,允许通过各种工具访问它。
准备迎接一些挑战:
无论如何,我认为,很有可能,你会管理和更快地写入文件,你也会获得更小的文件,这些文件更容易处理。