Python-文件I/O和执行时间

Python-文件I/O和执行时间,python,file-io,Python,File Io,在Python中执行此类命令时: fd = open('some_file', 'r') data = fd.read() ... # use data now ... 数据传输到底发生了什么?DMA在这里应用吗?如果我想“测量”直到我第一次使用数据所需的时间,它会像下面这样吗 使用DMA从文件到内存的时间为X毫秒,从内存到CPU的时间为Y毫秒Total time==X+Ymsec?Python到底做了什么?常规Python文件I/O被阻塞(因为底层的C运行时实现和/或OS系统调用被阻

在Python中执行此类命令时:

fd = open('some_file', 'r')

data = fd.read()

...

# use data now

...
数据传输到底发生了什么?DMA在这里应用吗?如果我想“测量”直到我第一次使用数据所需的时间,它会像下面这样吗


使用DMA从文件到内存的时间为X毫秒,从内存到CPU的时间为Y毫秒
Total time==X+Y
msec?
Python到底做了什么?

常规Python文件I/O被阻塞(因为底层的C运行时实现和/或OS系统调用被阻塞),这意味着
fd.read()
将被阻塞,直到操作系统实际检索到数据并传递给Python为止

缓存、DMA等的处理方式主要取决于操作系统。然而,你可以像你自己一样做事。从Python3.3开始,甚至还存在一些问题。对于Python2,有许多第三方库实现了相同的功能


您还可以使用线程模拟异步I/O,或者找到一个第三方库,使您能够轻松地执行异步文件I/O。

这更多地取决于操作系统。Python、Cython至少将使用std C库函数来执行I/O、fopen、fread等。我看到的任何优化(readahead、caching等)都取决于操作系统,因此在标准C库中,尽管
data
变量是预定义的,如
int data例如。当我需要变量时(例如,
data++;
,假设它没有缓存,从内存到CPU的传输时间不是很长吗?但是,首先,数据从磁盘传输到内存(不同的初始传输时间)是否存在?这很有启发性。不过,我在想Linux系统中的默认行为。如果它被阻塞,CPU会等待数据被接收。所以,当它被接收时,它不是被放在内存中直到需要从CPU返回吗?我只是在读一个文件,也许我现在需要它的数据,也许不是。数据在哪里a在从文件中读取它们之后,请先进行操作?我希望这是有意义的。问题告诉我,您可能应该阅读更多关于操作系统一般如何工作,以及磁盘/文件I/O一般如何工作的信息……例如,CPU通常不会主动等待I/O,至少在普通操作系统中不会。简化后,操作系统将标记进程(或者更确切地说是线程)正在等待(iowait)并同时运行其他内容。但这已经脱离主题,太宽泛了。是的,如果我是正确的,就会出现中断。磁盘“显示”数据已准备好供cpu使用。调度程序决定进程何时运行。因此,当进程再次运行时,数据将在哪里才能供进程使用?我坚持,因为我不确定是否要记住从内存到cpu+I/O到内存的时间。无论如何,感谢您的回答。数据将是在内存中(内存不一定意味着RAM;这些内容可能在同一时间被再次调出)。具体位置取决于通常从python运行时和特定于OS/平台的操作系统中删除至少两个抽象层的实现。要点是:如果您在python中讨论一般的文件I/O,那么谈论高度依赖于平台/操作系统的实现细节(如DMA、CPU、OS调度程序、OS分页)是没有意义的从python解释器进程的角度来看,很少有东西真正阻止了大多数现代硬件和操作系统上的操作。