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
위의 shutil.copy의 github 코드를 보면, cpython으로 작성되어있고, posix를 통해 직접적인 copy호출을 한다.
'Python' 카테고리의 다른 글
python parameter에서 bare *란? (0) | 2022.06.20 |
---|---|
python xxx is not a package (0) | 2022.03.21 |
(에러)RuntimeError: Task <Task pending name='Task-1' coro=<update_one() running at test.py:7> cb=[_run_until_complete_cb() (0) | 2021.12.17 |
(에러)Asyncssh error Host key is not trusted (0) | 2021.11.15 |
python zip folder (0) | 2021.11.15 |