• 공부한 날짜: 2021.11.17
  • 기록: 2021.11.23

 

추가 공부하기 좋은 사이트: https://data-newbie.tistory.com/231

 

[ Python ] 동시성과 Future / concurrent.futures 알아보기

https://hamait.tistory.com/748 초보자를 위한 동시성과 Future 1. 그림으로 보는 동시성 2. 동시성과 Future 이야기 3. 자바로 밑바닥부터 Future 구현 4. 언어별 Future 살펴보기 1. 그림으로 보는 동시성 은행..

data-newbie.tistory.com

-wait():  특정한 타임아웃 시간 동안 대기한 다음, 그 시간동안 완료된 작업과 그렇지 않은 작업을 구분하는 두 개의 세트로 된 튜플을 리턴한다.

-as_completed():  future 의 집합을 받아서 기다리면서 하나씩 완료되는 것 순서대로 순회하면서 반복하는 반복자를 생성하는 함수이다.

 

 

 

 

  • 비동기 작업 실행
  • 지연시간(Block) CPU 및 리소스 낭비 방지 -> (File)Network I/O 관련 작업 시 -> 동시성 활용 권장
  • 비동기 작업과 적합한 프로그램일 경우 압도적으로 성능 향상
  • futures : 비동기 실행을 위한 API를 고수준으로 작성 -> 사용하기 쉽도록 개선
  • Import threading, import multiprocessing 포함
  • concurrent.Futures
  • 1. 멀티 스레딩/ 멀티프로세싱 API 통일 -> 매우 사용하기 쉬움
  • 2. 실행중인 작업 취소, 완료여부 체크, 타임아웃 옵션, 콜배구가, 동기화 코드 매우 쉽게 작성할 수 있음 -> Promise 개념(알아보기)
  • GIL : 두 개 이상의 스레드가 동시에 실행될 때 하나의 자원을 액세스 하는 경우 문제점 방지를 위해 사용 
  • GIL 실행, 리소스 전체에 락이 걸린다 -> Context Swtich(문맥 교환)

 

  • 동시성 합계 계산 메인함수

 

 

-ThreadPoolExecutor(): 스레드 풀을 사용하여 호출을 비동기적으로 실행 

-ProcessPoolExecutor(): 프로세스 풀을 사용하여 호출을 비동기적으로 실행

-concurrent.futures: 비동기적으로 콜러블을 실행하는 인터페이스 제공 

-sumgenerator(): 1부터 해당 인덱스 값까지 모두 더하기. 그걸 전체 리스트로 반복 

  • 공부한 날짜: 2021.11.17
  • 기록: 2021.11.23

 

  • Coroutine: 단일(싱글)스레드, 스펙을 기반으로 동작하는 비동기 작업
  • 스레드: os에서 관리하고, 일할 수 있는 리소스가 많은 상태, CPU 코어에서 실시간, 시분할 비동기 작업 -> 멀티스레드
  • yield,send: 메인 <-> 서브
  • 코루틴 제어, 상태, 양방향 전송

 

  • 서브루틴: 메인루틴 호출 -> 서브루틴에서 수행(흐름제어)
  • 코루틴: 단일 스레드 환경에서 동시성 작업을 하기위한 프로그래밍 기법 
  • 코루틴 : 루틴 실행 중 중지 -> 동시성 프로그래밍(멈춘 지점 기억)/ 스레드에 비해 오버헤드 감소
  • 스레드: 싱글 스레드 -> 멀티스레드 -> 복잡 -> 공유되는 자원 -> 교착상태 발생 가능성 있음, 컨텍스트 스위칭 비용 발생, 자원 소비 가능성 증가
  • def -> async(비동기), yield -> await 

 

 

  • 코루틴 ex1
  • def이라고 선언돼있다고해서 모두 함수는 아니다. 함수/코루틴/제네레이터 모두 될 수 있음 

 

 

-코루틴의 자료형은 generator 

-yield 지점까지 서브 루틴 수행

 

  • send(): 메인루틴과 서브루틴이 데이터를 교환할 수 있게 해주고 next 기능까지 한다 

-주의해야할 점은 send()는 next()가 앞에 있어야 실행될 수 있다. 

 

이렇게 하면 오류발생&nbsp;

 

  • 코루틴 ex2
    • 코루틴 상태 : 1. GEN_CREATED(처음 대기 상태) 2. GEN_RUNNING(실행상태) 3. GEN_SUSPENDED(Yield 대기상태)                         4. GEN_CLOSED(실행 완료 상태)

 

  • 코루틴 ex3

  • 이터레이터(Iterator), 제네레이터(Generator)

 

-파이썬 반복 가능한 타입: collecions,text file, list, Dict, Set, Tuple, Unpaccking, *args

-가능한 이유: iter() 함수 호출하기 때문

 

 

  • 반복, next() 이해

-순서대로 알파벳 출력되다가 더이상 출력할 문자 없으면 break 실행 

 

  • 반복형 속성 여부 확인하는 방법 3가지

 

  • Generator Pattern 장점

1. 지능형 리스트, 딕셔너리, 집합 -> 데이터 증가 후 메모리 사용량 증가 -> 제네레이터 사용 권장함

2. 다위 실행 가능한 코루틴 구현과 연동

3. 작은 메모리 조각 사용

 

  • 제네레이터 예제(텍스트 넣어서 연습)

 

 

  • 병행성(Concurrency): 한 컴퓨터가 여러 일을 동시에 수행 -> !단일! 프록램 안에서 여러일을 쉽게 해결하는 것
  • 병렬성(Parallelism): 여러 컴퓨터가 여러 작업을 동시에 수행 -> 속도 향상 

 

  • 예제1 

이 부분은 잘 이해가 안감,,,,
이부분도 정확히 이해가 안감

 

  • Generator Ex3 
  • 중요함수: count, takewhile,filterfalse, accumulate, chain, product, groupby

 

 

 

 

  • itertools.accumulate(): 반복문에서 값 하나씩 더해나감

 

  • itertools.chain()

 

 

  • itertools.product()

 

  • groupby(): 같은 문자들로 하나씩 묶는다 

+ Recent posts