我注意到了并且进行了测试。
如果我传输与 .py 或 .pyc 大小完全相同的 .pdf、.mp4 等文件,前者的速度将约为 400mb/s,而后者的速度将约为 2mb/s?
我甚至在一个包含各种类型文件的文件夹上进行了测试。当它传输与 Python 无关的文件时,它总是很快,但一旦它开始接触 Python 文件,它的速度就会立即下降到几乎只有原来的 95%。
答案1
虽然问题中没有明确说明,但问题很可能是由于在复制到可移动或网络设备时数据未被缓存而是被同步。这是正常现象,因为未缓存的数据和同步传输到这些类型的设备都会产生开销。由于每个文件都会产生 API 和文件系统开销,即使是另一个本地磁盘,速度也可能更慢。问题是,当每个文件单独传输而不是并行传输时,这个问题更加明显。
看这里:
https://superuser.com/a/1448143/373021
问题不在于它们是 python 文件,而在于它们是小文件,如果是旋转磁盘,甚至可能存在于碎片设备上。
您可以通过将文件重命名为 .py 以外的其他名称来验证这一点,您将看到相同的结果。您会注意到,虽然复制 .mp4 文件要快得多,但将 .py 文件重命名为 .mp4 并不能加快传输速度。这是因为典型的 .mp4 视频是大型单个连续文件,不会遇到上述任何问题。
答案2
幕后发生的事情如下:
您正在复制 6430 个文件,一段时间后复制速度变慢。正如您当时看到的正在复制的 python 文件,自然的结论是 python 文件复制速度很慢。
问题可能出在您的防病毒软件上,它坚持逐个检查文件,但这种可能性较小。
我相信这种行为是因为您实际看到的是 Windows 和目标(如果不在同一台计算机上)的缓存填充速度有多快。
Windows 将首先以其速度从磁盘读取数据,然后以较低的速度将其复制到目标。在此阶段,您看到的速度基本上是从磁盘读取的速度。
当 Windows 内存缓存填满时,速度将下降到写入目标的速度,因为需要释放缓存内存才能从磁盘读取更多内容。然后速度会下降到写入速度,这总是低于读取速度,尤其是对于小文件。
此外,您正在使用 Explorer 进行复制,这是我所知道的该领域最慢的产品之一。