:: python
python :: 파이썬 파일 복사 shutil.copy 속도 빠르게 향상시키기
토람이
2021. 6. 17. 20:53
파이썬에서 파일을 복사할 때 shutil 라이브러리의 copy, copyfile 등의 함수를 많이 사용한다.
그런데 파일 복사 속도가 꽤 느린 편이다^.^;
shutil 라이브러리 파일에서 copy 함수들을 보면
궁극적으로 copyfileobj 함수를 호출하게 되어 있다.
def copyfileobj(fsrc, fdst, length=16*1024):
"""copy data from file-like object fsrc to file-like object fdst"""
while 1:
buf = fsrc.read(length)
if not buf:
break
fdst.write(buf)
copyfileobj 함수는 이렇게 정의되어있다.
주목해야 할 부분은 length=16*1024
즉, 파일 전송 시 최대 buffer size가 16K
=> size가 큰 파일을 복사하면 상당히 느려진다.
이 length 부분을 수정해서 속도를 개선해보자.
파일 복사 속도 향상시키는 방법
1. shutil.py 에서 직접 copyfileobj 함수를 수정하기
: 하지만 라이브러리 파일을 건드리는 건 권장하지 않는다.
2. 나의 코드 내에 사용자 함수를 선언, copyfileobj 를 override(재정의) 하기
def _copyfileobj_patched(fsrc, fdst, length=16*1024*1024):
"""Patches shutil copyfileobj method to hugely improve copy speed"""
while 1:
buf = fsrc.read(length)
if not buf:
break
fdst.write(buf)
shutil.copyfileobj = _copyfileobj_patched # shutil 의 copyfileobj 대신 _copyfileobj_patched 이 호출됨
요렇게 하면 최대 buffer size 16M 가 되어
size가 큰 파일도 기가 막히게 전송이 빨라진다!
300x250