- 재사용 가능한
@property
메서드를 만들려면 디스크립터를 사용하라.- 키워드:
__dict__
,__set__
,__get__
- 용어: 클래스 애트리뷰트, 인스턴스 애트리뷰트
- 키워드:
- 지연 계산 애트리뷰트가 필요하면
__getattr__
,__getattribute__
,__setattr__
을 사용하라.- 키워드:
__dict__
- 용어: 훅(hook), 오브젝트 훅
- 용어: 인스턴스 애트리뷰트 딕셔너리
- 키워드:
- 메타클래스 대신
__init_subclass__
를 사용해 하위 클래스를 검증하라. __init_subclass__
를 이용해 클래스를 자동으로 등록하라.- 용어: 클래스 등록
- 용어: 클래스 등록 패턴
- 용어: 직렬화, 역직렬화
__set_name__
으로 클래스 애트리뷰트를 표시하라.- 클래스를 합성하고자 하거나, 모든 메서드에 대한 일괄 데코레이팅이 필요하면 클래스 데코레이터를 고려하라.
- 용어: 클래스 합성
- 용어: 클래스 데코레이터
- 병렬적으로 자식 프로세스를 실행하고 관리하기 위해
subprocess
를 사용하라.- 용어: 동시성, 병렬성
- skip
- 스레드에서 데이터 경합을 피하기 위해
Lock
을 사용하라.- 키워드: 블로킹 I/O
- 스레드 사이의 작업을 조율하기 위해
Queue
를 사용하라.- 용어: 기아(starvation) 상태
- 용어: 생성자-소비자 큐
- 용어: 바쁜 대기(busy waiting)
- 용어: 폴링(polling)
- 키워드: 이터레이터 프로토콜,
iter
,__iter__
- 생명 게임 베이스코드
- 용어: 팬인(fan-in)
- 용어: 팬아웃(fan-out)
- 높은 동시성이 요구될 때 스레드를 계속 생성하면 어떤 문제가 일어나는지 알아라.
- 키워드: 높은 (블로킹 I/O)동시성
- 키워드: 스레드와 예외처리
- 키워드: 트레이스
- 키워드:
sys.stderr
Queue
를 이용하여 리팩토링하는 방법을 알고, 어떤 장단점이 있는지 기억해두어라.- 스레드가 필요한 경우에는
ThreadPoolExecutor
를 사용하라.- 키워드:
future.submit
,future.result
- 키워드:
- 스레드 대신 코루틴을 사용하는 것도 방법이다.
- 용어: 코루틴(coroutine)
- 용어: 이벤트 루프
- 키워드:
asyncio
,await
,coroutine.gather
skip ...
- 프로그램이 메모리를 사용하는 방식과 누수를 이해하기 위해
tracemalloc
을 사용하라.- 용어: 참조, 참조 카운팅
- 용어: 스택 트레이스(stack trace)