파비의 매일매일 공부기록

파이썬 동시성 프로그래밍 - #12 솔루션 선택하기 본문

Study/Python

파이썬 동시성 프로그래밍 - #12 솔루션 선택하기

fabichoi 2021. 8. 19. 23:30

이 책의 마지막 장에서는 미처 다루지 못한 라이브러리를 소개한다.

 

GPU 관련

- PyGPU : 이미지 프로세싱에 특화. 높은 속도를 잘아하고 로우 레벨 GPU API를 다룰 수 있음. 고차원 함수, 이터레이터, 리스트 및 GPU 알고리즘 구성에 특화된 형태와 같이 파이썬 코어 특징을 나타내고 있는 임베디드 언어.

 

이벤트 기반과 리액트 라이브러리

- Tornado : 파이썬 웹 프레임워크. 비동기 네트워킹 라이브러리. 논블로킹 네트워크 I/O를 활용하고 수천 개의 네트워크 연결을 관리할 수 있음.

- Flask : Tornado와 같은 형태지만 좀 더 작은 프레임워크. 구성하고 실행하기가 쉬움. 나도 몇 번 예제 작성해봄.

- Celery : 분산 메시지 패싱을 기반으로 한 비동기 작업 및 큐/잡 형태의 큐. 필수적인 소프트웨어 시스템에 복잡한 레이어를 추가하는 중개인 기술 구성이 필요할 때도 있음. 메시지 중개인은 마이크로 서비스 간 통신을 가능하게 하는 중간 중단기. RabbitMQ, Redis, Amazon SQS, Zookeeper 중개인과 호환.

 

데이터 사이언스 

- Pandas : 대규모 데이터 분석 프로젝터에 사용되는 고성능 오픈소스 라이브러리. 데이터 분석과 모델링보다는 준비에 초점. 일반적으로 R 프로그래밍 언어가 풀 수 있는 부분을 다룸.

- Matplotlib : 분석하고자 하는 데이터를 좋은 수준의 2D 시각화로 제공. 그래프로 작업하는 데 어려움을 없애주어 실제 문제에 집중하게 함.

- Tensor Flow : 데이터 플로우 그래프를 사용해 수치 계산을 수행하는 오픈소스 라이브러리. 데이터 플로우 그래프는 여러 연산 간의 데이터 의존성을 나타냄. 딥러닝과 신경망을 이용한 복잡한 AI를 구성하는 프레임워크.

- 상기의 대부분 라이브러리는 한 번씩 예제는 실행해봄. 생각보다 프로그래밍이 데이터 사이언스의 방향으로 가는 것도 같음.

 

시스템 디자인하기 : 권장사항일 뿐, 묘책은 없음. 각 상황에 맞게 생각과 연구 필요.

- 요구사항 : 작업하기에 앞서 상당한 시간을 프로젝트의 핵심 부분에 필요한 사항을 모으는 데 소비함. 시간과 노력의 비율은 핵심 부분의 양과 비례. 프로젝트가 개인적이지 않고 많은 사람을 대상으로 한다면 여러 요구사항을 모아야 함. 요구사항을 모으는 데는 두 가지 종류가 있음.

 = 함수형 요구사항 : 시스템이 해야 할 부분을 정의. 

 = 비 함수형 요구사항 : 시스템이 어떻게 결정할지에 대한 요구사항.

- 디자인 : 소프트웨어 구조를 디자인. 최종 설루션 디자인과 관련해 어떤 것이 있고 가능한지 연구할 것. 저자의 경우 프로젝트를 시작하기 전에 여러 라이브러리 개념을 개념 증명하고 적용. 라이선스의 문제를 염두할 것. 상용 라이브러리 사용 시 사용료 지불에 대한 고려를 해야 함.

 = 복잡한 연산 : 멀티프로세싱 모듈이나 PyCuDA 등 고려

 = 다량 이벤트 앱 : Asyncio, Twisted, RxPY 등을 고려

 = 다량 I/O 앱 : threading, concurrent.futures 모듈

- 디자인과 관련된 책 : 특정 라이브러리를 언제, 어디서 사용하는지에 도움 될 수 있음.

 = Software Architecture with Python : 수정이 쉽고 가독성 좋은 코드 작성. 테스트 용이성. 확장 가능한 코드 작성. 파이썬 디자인 패턴에 대한 소개. 한글판 있음 (https://www.aladin.co.kr/shop/wproduct.aspx?ItemId=258927566)

 = Python: Master the Art of Design Patterns : 객체지향 파이썬 프로그래밍과 소프트웨어 시스템에 적용되는 다양한 디자인 패턴 등의 주제를 다루고 있음. 소프트웨어 디자인의 전반적인 부분을 아우르는 좋은 책. 한글판은 없음. 아마존에 달려있는 댓글 평가로는 별로라는데..?

- 연구 : 디자인은 필요하며 시간과 고통을 줄일 수 있다. 거대한 소프트웨어 프로젝트를 디자인하고 연구하는 데 있어, 르네상스 시대의 과학자 레오나르도 다 빈치의 명언을 소개한다. "단순함이란 궁극의 정교 함이다." 특정 문제를 해결하는 소프트웨어 시스템을 작성하고자 단순한 방법으로 주어진 문제를 해결할 수 있어야 한다. 전적으로 동의

 

특정 예제들은 파이썬 버전이 안 맞거나 라이브러리 버전이 안 맞아서 실행은 못해봤지만

전반적으로 동시성, 그리고 파이썬에 대해 좀 더 깊게 배운 시간이었다. (그리고 꽤 힘들었다.. 하루에 한 챕터는 ㅠㅠ)

반응형
Comments