본문 바로가기

Python

os.system significantly take time more than shutil.

dataset을 옮기는 과정중에 파이썬 스크립트를 짜서 몇십만장의 image를 복사해야했다.

 

파일을 복사하는 방법은 여러가지이고, 많은 블로그들에서 알려주고 있다.

 

하지만 그러한 방법 중 os.system을 통해 shell 명령어와 똑같이 쓰는 방법이 쉬울 거 같아아서 썼지만,

 

대략 한개의 image를 복사하는데 0.4~0.5초가 걸렸다.

 

이렇게 가다가는 15만장 * 0.4 = 60000초 = 약17시간이 걸린다.

 

그래서 다른 방법중 shutil.copy()를 써서 돌렸는데 세상에나 10분도 채 안되서 복사가 된 것이다.

 

어마어마한 차이를 보여 이유를 찾아봤다.

 

os.system은 subshell을 만들어 copy작업을 수행하는 시간이 길고,

 

shutil은 직접적으로 system call을 요청하기 때문인데, 자세히 들어가면 

https://github.com/python/cpython/blob/3fee7776e6ed8ab023a0220da1daf3160fda868b/Lib/shutil.py#L86

 

GitHub - python/cpython: The Python programming language

The Python programming language. Contribute to python/cpython development by creating an account on GitHub.

github.com

위의 shutil.copy의 github 코드를 보면, cpython으로 작성되어있고, posix를 통해 직접적인 copy호출을 한다.