[Python] 속도 개선 방법

반응형
    반응형

    파이썬은 간결하고 직관적으로 쓸 수 있는 장점이 있는 반면에 굉장히 느린 코드입니다.

    루프나 알고리즘을 실행하면 다른 언어에 비해 시간이 오래걸립니다. 

    간단한 구조는 시간이 얼마 안 걸려서 큰 문제는 없겠지만 알고리즘이 복잡해지고 데이터 크기가 커지면 시간은 굉장히 중요한 요소가 됩니다.

    답은 간단하게 속도가 빠른 C 나 C++을 쓰면 되지만 갑자기 C를 배워서 할 수 있는 실정이 안 된다면

    파이썬 안에서 개선할 방안을 찾아야 합니다. 

     

    개선 방안으로는 다음과 같이 있습니다. 

    • Vectorization(벡터화) : 좌표값이나 행렬로 값을 모으는 것을 벡터화라고 합니다. 주로 수학이나 공학에서 쓰는 행렬개념과 비슷합니다. 벡터를 행렬표시로 변환해서 쓰면 행렬 계산으로 넘어가 계산을 하게 되는 건데 그런 학술적인 얘기까지 갈 필요는 없고 한개씩 있는 값을 하나의 덩어리로 만든다고 생각하면 됩니다. numpy에서 하는 것처럼 shape를 정해 만든는 것을 의미합니다. 벡터로 값을 묶어서 한꺼번에 계산한다면 한개씩 계산하는 것보다는 빨라지니 해볼만한 시도가 되겠습니다.

     

    • Dynamic compiling(동적 컴파일) : 컴퓨터 프로그래밍을 하려면 인터프리트 방식과 정적 컴파일 방식이 있습니다. 인터프리트 방식은 실행 중 언어를 읽으면서 컴퓨터가 그에 맞게 기능 대응을 하는 것이고 정적 컴파일은 코드를 실행하기 전에 코드를 기계어로 번역하는 방식입니다. 동적 컴파일은 이 두가지 방식을 혼합하는 방식으로 코드를 기계어 코딩으로 번역하면서 캐싱하고 새로 불러오는 대신 캐싱한 것을 가져오는 방식으로 하는 것을 의미합니다. 
      Numda라는 패키지를 쓰면 동적 컴파일을 파이썬에서 사용할 수 있습니다. 그래서 파이썬에서 동적 컴파일을 할 수 있게 됩니다. 그러면 캐싱과 동시에 코드진행 이 되니 속도가 빨라집니다.

     

    • 정적 빌드: 정적 빌드는 하나의 패키지로써 하나의 응용 프로그램 안에 라이브러리가 있어서 함께 움직이는 방식을 의미합니다. 사전에 빌드를 해놓으면 동적으로 움직이게 됩니다. Cython은 C와 Python을 혼합한 형태의 패키지인데 이것을 이용해 속도를 높일 수가 있습니다.

     

    • 멀티 프로세스 : 파이썬에서 코딩작업을 하면 보통 하나의 프로세스를 사용하지만 멀티프로세스를 사용해 속도를 높이는 방법입니다.

     

    실제적으로 얼마나 효율이 있을지는 알 수 없습니다. 어떤 작업을 하냐에 따라 고효율이 나올 수도 있고 안 나올수도 있습니다. 그래도 속도 개선을 위해 어떤 작업을 해야 하는지 알고 있다면 프로젝트 계획을 할 때 어느정도 계획을 세울 수 있지 않을까 싶습니다. 

     

    이번 포스팅은 말 그대로 개요이고 자세한 사항은 저도 공부중이라 정리가 되는대로 포스팅을 할까 합니다.

     

    관련 포스팅

    [Python/알고리즘] - [Python] 속도 개선 -Loop편

    [Python/알고리즘] - [Python] 속도 개선 - 알고리즘편

    [Python/알고리즘] - [Python] 속도개선 -알고리즘편(Recursive)

    [Python/알고리즘] - [Python]속도개선 - Recursive pandas

     

    댓글

    Designed by JB FACTORY

    ....