-
멀티쓰레딩을 통한 최적화 경험 기록배움 2019. 1. 31. 19:05
파이썬으로 원하는 노래 정보를 Youtube Data api 에 요청해
알맞은 비디오를 차트에 기반해 가져오는 프로그램을 개발하고 있었다.
그런데 프로그램 실행시간이 약 1분 정도로, 너무 오래 걸렸다.
차트도 가져오고 곡 하나하나에 대해 API와 알맞은 비디오를 가져오기 위한 필터를 거쳐야하기 때문에 오래 걸릴수 밖에없다고 생각하며
최적화를 위해 코드를 수정했다.
------------------------수정 전---------
for song in songs: getVidOfSong(song)
------------------------수정 후---------
for song in songs: t = threading.Thread(target=getVidOfSong, args=[song]) t.start()
import threading도 해주어야 한다. args는 튜플이나 리스트형식을 받기 때문에 [song] 이나 (song, ) 과 같이 넣어주어야 한다.
아주 간단한 내용이지만 효과는 어마무시했다.55초 걸리던 내용을 무려 2초대의 시간만에 출력해버린 거다.뒤늦게 threading을 모두 join하기 위해 추가한 코드.for thread in threading.enumerate(): if thread.daemon: continue try: thread.join() except RuntimeError as err: if 'cannot join current thread' in err.args[0]: # catchs main thread continue else: raise
모든 thread를 join했음에도 실행시간은 3초대에 불과했다. 언빌리버블하다.
스레드가 100개나 되니까 더 많은 효과를 본 탓일까?
이 경험을 기점으로 스레드에 대한 관심이 확 올라갔다. 원리 등은 학교에서 배웠지만 실제로 쓸 때의 문제점 등은 배울게 많을 것이다.
'배움' 카테고리의 다른 글
[후기]파이콘 Pythonic한 코드가 효율적일까? (0) 2020.10.05 Javascript foreach와 for문에서의 return문 (0) 2019.01.18