ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 멀티쓰레딩을 통한 최적화 경험 기록
    배움 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개나 되니까 더 많은 효과를 본 탓일까?




    이 경험을 기점으로 스레드에 대한 관심이 확 올라갔다. 원리 등은 학교에서 배웠지만 실제로 쓸 때의 문제점 등은 배울게 많을 것이다.

Designed by Tistory.