python – 我应该如何优化这个文件系统I / O绑定程序?
我有一个
python程序,它做这样的事情:
>从csv文件中读取一行. 第6步并没有真正花费太多时间.似乎步骤4占据了大部分时间.在大多数情况下,我想优化它来处理在具有某种RAID设置的四核服务器上运行的数百万的记录集. 我必须解决这个问题: >从第一步读取整个文件(或至少以非常大的块读取)并将文件整体或以非常大的块写入磁盘.这个想法是硬盘在文件之间来回花费的时间更少.这会做什么缓冲不会? 当然,这个问题的正确答案是“通过测试做你认为最快的事情”.但是,我主要想弄清楚我应该先把时间花在哪里.在这些问题上有更多经验的人有什么建议吗? 解决方法
Python已经进行了IO缓冲,操作系统应该处理预取输入文件和延迟写入,直到它需要RAM来处理其他内容,或者只是对RAM中的脏数据持续太长时间感到不安.除非您强制操作系统立即写入它们,例如在每次写入后关闭文件或在O_SYNC模式下打开文件.
如果操作系统没有做正确的事情,您可以尝试提高缓冲区大小(第三个参数为open()).对于适当值的一些指导,给定100MB / s 10ms延迟IO系统,1MB IO大小将导致大约50%的延迟开销,而10MB IO大小将导致9%的开销.如果它仍然是IO绑定,您可能只需要更多带宽.使用特定于操作系统的工具来检查您从磁盘获取/从哪种带宽. 同样有用的是检查步骤4是否花费了大量时间执行或等待IO.如果它正在执行,你需要花更多的时间来检查哪个部分是罪魁祸首并对其进行优化,或者将工作分成不同的流程. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |