일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Daily Challenge
- 3줄정리
- 매일
- 10분
- 사이드
- English
- 쓰릴오브파이트
- 만화도
- 읽기
- 링피트
- 월간
- 30분
- 프로젝트
- realclass
- 개발자
- 잡생각
- Problem Solving
- leetcode
- 괜찮음
- 파비최
- Writing
- 스탭퍼
- 운동
- 뭐든
- 미드시청
- FIT XR
- 영어공부
- 영어원서읽기
- 리얼 클래스
- 화상영어
- Today
- Total
파비의 매일매일 공부기록
파이썬 동시성 프로그래밍 - #5 스레드 간의 통신 본문
이번장은 스레드 간의 통신에 대한 내용이다.
통신은 동시성 시스템에서 중요한 부분으로 적절한 통신 메커니즘 구현 없이는 동시성 및 병렬화의 어떤 성능 효과도 얻을 수 없다.
스레드 및 프로세스 들 간에 통신할 때 가장 이슈가 많이 일어나는데, 그전에 모든 상황과 옵션을 이해해야 한다.
이번장에서는 자체 통신 메커니즘을 구현하는 방법을 배우고 언제 어디서 사용하는지를 알아본다.
기본적인 자료구조 : 파이썬에서 기존 자료구조는 기본적으로 다양한 스레드 세이프 형태를 띠고 있음.
다음은 각 자료구조 별 스레드 세이프 방식으로 구현하는 예를 소개한다.
세트 : 스레드 세이프 방식으로 set 클래스를 이용하는 가장 좋은 방법은 set 클래스를 확장하는 것. 기존의 파이선 set 클래스로부터 상속받는 LockedSet 클래스 객체 정의. add/remove/contains 함수 정의
데코레이터 : 스레드 세이프 통신을 위해서라면 추가적인 기술적인 방법이 필요. (데코레이터 활용 등)
클래스 데코레이터 : 메서드 1개만 보호하는 걸 넘어 클래스 내의 모든 함수를 보호해 스레드 세이프 방식으로 호출하도록 구성.
리스트 : 기본적은 리스트는 스레드에는 안전하나 리스트에 접근할 때만 안전. 리스트 구조에서 나타난 데이터는 보호되지 않기에 데이터를 안전하게 변경하려면 적절한 락 메커니즘 구현 필요하며 경합 조건 발생에도 유의해야 함. 세트에서의 예와 같은 방식으로 클래스를 확장해야 함.
큐 : 내장 큐 모듈에서 일반적인 Queue, LifoQueue, PriorityQueue라는 세 가지 형태의 큐 제공. 기본적으로 스레드에 안전하므로 복잡한 락 메커니즘 구현할 필요 없음.
- FIFO 큐 : 기본적인 큐. 요청을 공평하게 처리 가능, 대기수에 따라 처리시간 가늠 가능
- LIFO 큐 : 일반적인 큐와는 정반대로 동작. DFS, DLS 등 인공지능 기반 알고리즘에 부분적으로 사용.
- 우선순위 큐 : 큐 메커니즘에 우선순위가 추가된 형태. 가중치를 두어 큐에 집어넣어서 구현. 튜플을 사용해 (순위 값, 객체) 형태로 사용
queue 객체 : 꽉 찬 큐/빈 큐에 대한 퍼블릭 메서드 존재. join 메서드 존재.
deque 객체 : collections 모듈이 있어서 큐 양쪽에서 삽입하고 빼내는 부분이 존재.
그 외에도 원소 추가/꺼내기/삽입/회전에 대한 소스 소개.
자체적인 스레드 세이프 통신 구조 정의하기 : 기본적인 통신 프리미티브 대신 스레드 간의 통신을 위해 자체 구성 객체를 구현하는 예를 소개. 여기서는 웹 크롤러에 대한 내용.
각 기능 및 요소에 대한 짧은 소스들과 그에 대한 설명들이 매우 잘 소개되어있다.
하나씩 소스를 따라 작성하다 보면 책에 있는 설명과 같이 이해하기가 매우 용이했다.
'Study > Python' 카테고리의 다른 글
파이썬 동시성 프로그래밍 - #7 실행자와 풀 (0) | 2021.08.14 |
---|---|
파이썬 동시성 프로그래밍 - #6 디버깅과 벤치마킹 (0) | 2021.08.13 |
파이썬 동시성 프로그래밍 - #4 스레드 간 동기화 (0) | 2021.08.11 |
파이썬 동시성 프로그래밍 - #3 스레드 라이프 (0) | 2021.08.10 |
파이썬 동시성 프로그래밍 - #2 병렬화 (0) | 2021.08.09 |