在Python中从非本地磁盘读取大文件

时间:2014-07-10 22:19:25

标签: python memory local-storage large-files

很抱歉,如果已经接近主题,我找不到它。 我试图用Python阅读一个不在本地驱动器中的大型csv文件(> 300 MB)的工作台。

我不是编程方面的专家,但我知道如果你先将它复制到本地驱动器中,那么阅读它会花费更少的时间(或者我错了?)。

问题是我测试了两种方法并且计算时间相似。 我错过了什么吗?有人可以解释/给我一个很好的方法来尽快读取这些文件吗?

要复制到本地驱动器我正在使用:shutil.copy2

用于读取文件:MyFile中的每一行

非常感谢你的帮助, 克里斯托夫

1 个答案:

答案 0 :(得分:0)

复制文件会依次读取并保存到其他位置。

应用程序的性能可能因数据访问模式,I / O时间计算,网络延迟和网络带宽而异。

如果您执行一次脚本并按顺序读取它,则与复制文件相同,除非您对其执行计算而不是保存。即使您处理小块数据,它也可能会被缓冲。事实上,在单次执行的情况下,如果你复制1st,你实际上读了两次相同的数据,一次是复制,一次是计算的复制。

如果多次执行脚本,则需要检查数据吞吐量是多少。例如,如果你有一个千兆以太网,那么1GBit / s是125MByte / s,如果你处理数据较慢,那么你不受带宽的限制。

当您发送多个小块数据请求时,网络延迟就会发挥作用。根据读取请求,您发送网络请求并在有限时间内恢复数据,这就是延迟。如果您请求一大块数据,那么您需要支付"延迟限制一次,如果你要求1000倍的1/1000大块,你将需要"支付"它1000次。但是,这可能是由网络文件系统从您身上抽象出来的,如果是顺序读取,它将被缓冲。它会表现在randon跳过文件并阅读它的小块。

您可以通过检查每秒处理的字节数并将其与硬件限制进行比较来检查您的限制。如果它接近硬盘速度(在你的情况下我打赌不是)你受到I / O - 硬盘的约束。如果它更低,接近网络带宽,则受到I / O - 网络的限制。如果它甚至更低,则要么受到数据处理速度或I / O网络延迟的限制。但是,如果您受到I / O的约束,您应该看到两种方法之间存在差异,因此如果您看到相同的计算结果。