일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 영어원서읽기
- 10분
- 스탭퍼
- 영어공부
- 운동
- 괜찮음
- realclass
- leetcode
- 화상영어
- 읽기
- 개발자
- Writing
- English
- FIT XR
- 매일
- 쓰릴오브파이트
- 30분
- 만화도
- 3줄정리
- 프로젝트
- 사이드
- 월간
- 파비최
- 미드시청
- 링피트
- Daily Challenge
- 잡생각
- 리얼 클래스
- 뭐든
- Problem Solving
- Today
- Total
파비의 매일매일 공부기록
파이썬 동시성 프로그래밍 - #7 실행자와 풀 본문
이번장은 실행자와 풀에 대한 내용이다.
풀이라는 개념은 Java 사용할 때 많이 봤던 거 같은데.. 같은 개념인지는 잘 모르겠다.
또한 이번장은 프로그램의 실행 속도를 높이고자 파이썬에서 구현하는 방법을 소개할 예정이다.
동시성 퓨처 : 파이썬 3.2에 새로 추가된 기능. 자바의 ThreadPoolExecutor를 파이썬으로 구현한 형태. 멀티스레드 작업 시 가장 많은 연산을 필요로 하는 작업은 스레드를 시작하는 작업이다. ThreadPoolExecutor는 스레드 풀이 필요할 동안 이를 생성함으로써 문제를 다룸. 사용자는 더 이상 스레드를 생성하거나 실행할 필요가 없고 한 번만 스레드를 생성해 새로운 작업에 기여할 수 있다. 여러 개의 스레드를 한 번에 불러와 실행되는 동안 다양한 작업이 이뤄지기 전에 스레드를 생성하는 일을 한 번만 함.
- Executor 객체 : concurrent.futures 모듈에 있으며 동시성 형태로 여러 가지 호출 지원. 자체적인 객체 및 콘텍스트 관리자 같은 방법으로 사용되며 스레드 생성/시작/조인 같은 지루한 작업을 가독성 높은 코드로 바꾸는 작업을 함.
- 퓨처 객체 : 실행자에 작업을 전달할 때 인스턴스 화가 됨. 주어진 값이 이후에 값이 되는 객체.
- 퓨처 객체의 단위 테스트 : concurrent.futures에서 지원. set_running_or_notify_cancel, set_result, set_exception 메서드 등으로 테스트 가능.
- 호출 가능한 작업 취소 : 시스템에서 실행자 객체로부터 처리되기 전 어떤 작업을 취소하고자 할 때. cancel 한수를 호출하는데 취소가 되었으면 True, 안되었으면 False 반환
- 결과 얻어내기 : 일반적으로 몇몇 상황에서는 실행자 객체의 작업을 취소하거나 모를 수도 있으며, 반환 값을 생각하지 않을 수 있지만, 결과를 검색하고 저장하기 위한 방법이 존재. executor.map 함수를 활용하면 됨.
- as_completed 사용 : 모든 퓨처 객체를 저장해야 하는 상황일 때 사용 가능.
- 콜백 설정 : 작업 요청을 보내고 다른 일을 하는 등 잊고 있다가, 요청된 작업이 완료되었을 때 다시 호출에 사용되는 것을 의미.
- 예외 클래스 : 이전에 자식 스레드에서 그 밖의 스레드로 예외를 전달하고자 큐를 사용했었는데, 퓨처 객체에서 결과를 검색하는 방법과 동일하게 예외도 반환 가능.
ProcessPoolExecutor : 기본적으로 ThreadPoolExecutor와 동일한 기능으로 사용됨. Executor 클래스의 하위 클래스이므로 많은 메서드가 공통이다. 이후의 내용은 ProcessPoolExecutor 모듈의 사용법에 대한 소개다. ProcessPoolExecutor 생성, 콘텍스트 관리자, 연습 및 연산속도 높이기 등이다.
웹 크롤러 성능 높이기
- 계획하기 : 기존의 웹 크롤러의 성능을 어떻게 높일지 살펴본다. ThreadPoolExecutor를 사용해 코드를 리펙토링 하고 CSV나 JSON 파일 포맷으로 크롤링 결과 출력하고, 크롤링하는 모든 페이지 및 각 정보를 저장해 데이터를 활용한 사이트 성능을 높이는 순으로 진행한다.
익숙하면서 익숙하지 않은 기술에 대한 내용이었다.
예제들이 많아서 하나씩 해보면서 좀 더 이해해야 할 듯싶다.
'Study > Python' 카테고리의 다른 글
파이썬 동시성 프로그래밍 - #9 이벤트 기반 프로그래밍 (0) | 2021.08.16 |
---|---|
파이썬 동시성 프로그래밍 - #8 멀티프로세싱 (0) | 2021.08.15 |
파이썬 동시성 프로그래밍 - #6 디버깅과 벤치마킹 (0) | 2021.08.13 |
파이썬 동시성 프로그래밍 - #5 스레드 간의 통신 (0) | 2021.08.12 |
파이썬 동시성 프로그래밍 - #4 스레드 간 동기화 (0) | 2021.08.11 |