Python/core 3

[Python] 235MB vs 30MB: 왜 Threading은 1만 개 처리에 실패했나?

0. 들어가기 전에: Python의 GIL과 I/O의 관계본격적인 실험에 앞서, 우리가 반드시 알고 넘어가야 할 Python의 중요한 특성이 있습니다. 바로 GIL (Global Interpreter Lock)입니다.🤔 왜 Python은 하필 GIL을 선택했을까?이것은 Python의 메모리 관리 안전성을 위한 필연적인 선택이었습니다. 1. 참조 카운팅(Reference Counting)과 경쟁 상태(Race Condition) Python(정확히는 CPython)은 객체의 생명주기를 관리하기 위해 참조 카운팅 방식을 사용합니다. 어떤 객체가 몇 번 참조되고 있는지 숫자를 세다가, 0이 되면 메모리에서 해제하는 방식입니다.만약 GIL이 없다면 멀티 스레드 환경에서 치명적인 문제가 발생합니다.시나리오: 스..

Python/core 2025.12.22

Pydantic, Dataclass, TypedDict는 언제 쓰는 게 좋을까?

프로젝트를 진행하던 중 타입을 선택하는 것에 있어서 고민이 생겼고, 자료를 찾아가며 나름의 기준이 필요했다. 고민의 시작: dataclass 폭탄처음으로는 Dataclass를 사용하였는데 사용하며 좀 마구잡이로 쓴 경향이 있지 않나 싶다. 이 고민은 한 책[전문가를 위한 파이썬(2판]에서 말하기를  추가적인 메서드 동작없이 타입만을 체크하기 위해 Dataclass 로 선언한것이라면, 냄새를 유발할 수도 있다는 의견을 보고 시작되었다. 왜 정적 타입이 필요하지?동적 타이핑을 베이스로 두고 타입추론을 하는 파이썬은 다른 언어에 비해 유연하고 빠른 개발을 할 수 있는 특징이 있다. 하지만 여기서 정적 타입검사는 왜 나왔을까? 이건 동적 타입 언어의 특징에서 찾아 볼 수 있다. exam = "나는문자열"typ..

Python/core 2025.03.27

__contains__

파이썬에서 요런 범위를 판단하는 코드를 작성해본적이 있을거에용.a = 10b = 20c = 15if a   이 코드를 좀더 Pythonic 하게 작성하는 방법에 대해 알아봐요. 먼저 파이썬은 객체 지향 언어입니다.여기서 우리는 판단할 범위를 클래스로 만들어 줄거에용class MyRange: def __init__(self, min, max): self.min = min self.max = maxma_range = MyRange(10,15)print(ma_range.min) # 10print(ma_range.max) # 15 자 ! 마레인지가 완성되었습니다.! min과 max가 잘 출력 되고있습니다.그러면 우리가 원하는 범위내에 포함되는 판단을 할수 있을까용?print( 1 ..

Python/core 2025.01.25