드디어 Python 3.13.0 에서 GIL이 해제 되었다. Python 3.13.0 으로 멀티쓰레딩 성능 테스트를 해보려 했지만, 실패했다.찾아보니, 일반 CPython 3.13 에선 아직 안되고, GIL을 해제하여 빌드 된 CPython을 사용해야 한다.pyenv 를 활용하여 GIL이 해제된 CPython을 구해보자pyenv install 3.13t-devpyenv shell 3.13t-devpython3 --version # Python 3.13.0+ 형식으로 나오면 성공 GIL이 해제되어 성능이 싱글 쓰레드 그렇다면 8코어 8쓰레드 M3 기준 CPU를 잘 갈구는지 확인해보자 테스트 코드import mathimport multiprocessingimport sysimport sysconfigi..
파이썬 자료구조 특징특징ListDictionarySetTuple순서 유지OPython 3.7 부터 OXO인덱싱OXXO변경 가능성OOOX중복 허용O키는 중복 불가, 값은 가능XO데이터순차 데이터 키-값 쌍 데이터 고유한 요소 집합불변 데이터 GIL(Global Interpreter Lock)Python 매커니즘으로 여러 스레드가 동시에 실행되는 것을 방지 → 한 번의 하나의 스레드만 실행됨목적메모리 관리 - 참조 카운트를 통해 가비지 컬렉터를 작동하는 데, 이 부분이 race condition에 취약함, 이를 해결간소화 - 다중 스레드 환경에서 데이터 무결성을 유지장점GIL로 다중 스레드 환경의 복잡한 문제를 쉽게 해결 → 그냥 스레드를 잠궈버림메모리 관리 문제를 해결하여 데이터 무결성 유지단점병렬성 제..
파이썬 GIL이란?파이썬은 다른 언어 (C++ or Java)의 멀티쓰레드와 다른 점이 있다. 멀티 쓰레드가 멀티 쓰레드가 아니다 무슨 말이냐 하면 동시성을 만족하지 못한다.위의 그림처럼 쓰레드를 3개로 나누어 실행하더라도 GIL를 가진 쓰레드만 실행되고, 나머지 쓰레드는 GIL release 되기를 기다린다.동시성을 갖기 위해서는 멀티 프로세싱을 활용해야 한다. 다만 멀티 프로세스는 멀티 쓰레드에 비해 오버헤드나 데이터 교환 어려움 등의 단점이 있다. 멀티 쓰레드의 사용사실상 CPU 코어나 쓰레드를 못굴리는데, 멀티쓰레드를 언제 사용하냐I/O Bound를 해결할 때 사용한다. DB, API, UI 등의 작업들은 CPU 작업 속도에 비해 현저히 느리기에 CPU 입장에서는 I/O 요소들로 인해 작업 손실을..
회사에서 Pandas와 Numpy 를 통해 대용량 로그 파일을 처리하는 데, 비이상적으로 긴 응답 시간을 해결한 내용을 기술한다.선 3줄 요약Pandas 인덱스 접근 함수는 at이 가장 빠르다Pandas의 DataFrame 각 cell별 업데이트가 아닌 Numpy의 array로 행을 만들어 교체가 더 빠르다.Pandas의 DataFrame → Numpy의 ndarray 대체가 더 빠를 수 있다. Pandas vs Numpy 보통 파이썬에서 행렬 데이터를 처리하면 Pandas가 가장 먼저 검색되고 예시가 많다.하지만 읽기/쓰기 작업이 빈번하다면 Pandas의 DataFrame 보단 Numpy의 ndarry가 성능면에서 더 좋다.https://www.geeksforgeeks.org/difference-b..
속도문서에 따르면 3.10에 비해 10% ~ 60% 빨라졌다. 즉 1.25 배 빨라졌다 예외 처리 새 구문 (except*) 예외문에 대한 그룹을 설정할 수 있고, 한번에 여러 예외를 받을 수 있다.또한 출력문을 예쁘게 그려준다def f(): raise ExceptionGroup( "group1", [ OSError(1), SystemError(2), ExceptionGroup( "group2", [ OSError(3), RecursionError(4) ] ..