怎么会呢urllib.urlopen()工作?

2024-04-18 16:52:59 发布

您现在位置:Python中文网/ 问答频道 /正文

让我们考虑一个大文件(~100MB)。让我们考虑一下这个文件是基于行的(一个文本文件,具有相对较短的行~ 80个字符)。 如果我使用内置的open()/file(),文件将加载到lazy manner。 一、 如果I do aFile.readline()只有一个文件块会驻留在内存中。是吗urllib.urlopen()执行类似的操作(使用磁盘上的缓存)?在

urllib.urlopen().readline()和{}之间的性能差异有多大?让我们考虑一下该文件位于本地主机上。一旦我用urllib.urlopen()打开它,然后用file()打开它。使用readline()循环文件时,性能/内存消耗的差异有多大?在

处理通过urllib.urlopen()打开的文件的最佳方法是什么?逐行处理是否更快?或者我应该把一堆行(大约50行)加载到一个列表中,然后处理这个列表?在


Tags: 文件内存列表readline差异openurllib性能
2条回答

Does the urllib.urlopen() do something similar (with usage of a cache on disk)?

操作系统可以。当您使用网络API(如urllib)时,操作系统和网卡将执行低级工作,将数据拆分为通过网络发送的小数据包,并接收传入的数据包。这些都存储在缓存中,因此应用程序可以抽象出包的概念,并假装它将发送和接收连续的数据流。在

How big is the difference in performance between urllib.urlopen().readline() and file().readline()?

很难比较这两者。对于urllib,这取决于网络的速度以及服务器的速度。即使对于本地服务器,也存在一些抽象开销,因此,通常从网络API读取数据比直接从文件读取要慢。在

对于实际的性能比较,您必须编写一个测试脚本并进行测量。但是,你为什么还要费心呢?你不能用另一个代替它们,因为它们有不同的用途。在

What is best way to process a file opened via urllib.urlopen()? Is it faster to process it line by line? Or shall I load bunch of lines(~50) into a list and then process the list?

由于瓶颈是网络的速度,所以一得到数据就处理它可能是个好主意。这样,操作系统可以在“后台”缓存更多的传入数据。在

在处理行之前在列表中缓存行是没有意义的。你的程序会坐在那里等待足够的数据到达,而它可能已经在做一些有用的事情。在

open(或file)和{}看起来他们在那里做着相同的事情。urllib.urlopen基本上是创建一个socket._socketobject,然后调用makefile方法(该方法的内容如下)

def makefile(self, mode='r', bufsize=-1):
    """makefile([mode[, bufsize]]) -> file object

    Return a regular file object corresponding to the socket.  The mode
    and bufsize arguments are as for the built-in open() function."""
    return _fileobject(self._sock, mode, bufsize)

相关问题 更多 >