让我们考虑一个大文件(~100MB)。让我们考虑一下这个文件是基于行的(一个文本文件,具有相对较短的行~ 80个字符)。
如果我使用内置的open()
/file()
,文件将加载到lazy manner。
一、 如果I do aFile.readline()
只有一个文件块会驻留在内存中。是吗urllib.urlopen()执行类似的操作(使用磁盘上的缓存)?在
urllib.urlopen().readline()
和{urllib.urlopen()
打开它,然后用file()
打开它。使用readline()
循环文件时,性能/内存消耗的差异有多大?在
处理通过urllib.urlopen()
打开的文件的最佳方法是什么?逐行处理是否更快?或者我应该把一堆行(大约50行)加载到一个列表中,然后处理这个列表?在
操作系统可以。当您使用网络API(如
urllib
)时,操作系统和网卡将执行低级工作,将数据拆分为通过网络发送的小数据包,并接收传入的数据包。这些都存储在缓存中,因此应用程序可以抽象出包的概念,并假装它将发送和接收连续的数据流。在很难比较这两者。对于
urllib
,这取决于网络的速度以及服务器的速度。即使对于本地服务器,也存在一些抽象开销,因此,通常从网络API读取数据比直接从文件读取要慢。在对于实际的性能比较,您必须编写一个测试脚本并进行测量。但是,你为什么还要费心呢?你不能用另一个代替它们,因为它们有不同的用途。在
由于瓶颈是网络的速度,所以一得到数据就处理它可能是个好主意。这样,操作系统可以在“后台”缓存更多的传入数据。在
在处理行之前在列表中缓存行是没有意义的。你的程序会坐在那里等待足够的数据到达,而它可能已经在做一些有用的事情。在
open
(或file
)和{urllib.urlopen
基本上是创建一个socket._socketobject
,然后调用makefile
方法(该方法的内容如下)相关问题 更多 >
编程相关推荐