只是添加一些有趣的信息:WIndows不喜欢shutil实现内部使用的微小缓冲区。
我已经快速尝试了以下方法:
- 将原始的 shutil.py 文件复制到示例脚本文件夹,并将其重命名为 myshutil.py
- 将第一行更改为
import myshutil
- 编辑了 myshutil.py 文件并从以下更改了 copyfileobj
def copyfileobj(fsrc,fdst,length = 16 * 1024):
至
def copyfileobj(fsrc,fdst,length = 16 * 1024 * 1024):
使用16 MB的缓冲区而不是16 KB的缓冲区可显着提高性能。
也许Python需要针对Windows内部文件系统特征进行一些 调整 ?
编辑:
在这里找到了更好的解决方案。在文件的开头,添加以下内容:
import shutildef _copyfileobj_patched(fsrc, fdst, length=16*1024*1024): """Patches shutil method to hugely improve copy speed""" while 1: buf = fsrc.read(length) if not buf: break fdst.write(buf)shutil.copyfileobj = _copyfileobj_patched
这是当前实现的简单补丁,并且在这里可以完美地工作。
Python 3.8+: Python
3.8进行了一次重大检查,包括将Windows缓冲区从16KB增加到1MB(仍小于此票证中建议的16MB)。看到票,比较