본문 바로가기

Python/Intermediate

(18)
[Python] 병행성(Concurrency) - Futures(2) 2가지 패턴 실습 concurrent.futures - wait, as_completed import os import time from concurrent.futures import ThreadPoolExecutor, ProcessPoolExecutor, wait, as_completed WORK_LIST = [100000000, 10000000, 1000000, 100000] # 동시성 합계 계산 메인 함수 # 누적 합계 함수(제레네이터) def sum_generator(n): return sum(n for n in range(1, n+1)) # wait - 모든 작업이 끝날때까지 기다림 # as_completed - 먼저 끝난 작업결과를 반환함 def main(): # Worker Count wor..
[Python] 병행성(Concurrency)(4) - Futures(1) Futures 동시성비동기 작업 실행지연시간(Block) CPU 및 리소스 낭비 방지 -> (File)Network I/O 관련 작업 -> 동시성 활용 권장비동기 작업과 적합한 프로그램일 경우 압도적으로 성능 향상 futures : 비동기 실행을 위한 API를 고수준으로 작성 -> 사용하기 쉽도록 개선concurrent.Futures1. 멀티스레딩/멀티프로세싱 API 통일 -> 매우 사용하기 쉬움2. 실행중이 작업 취소, 완료 여부 체크, 타임아웃 옵션, 콜백추가, 동기화 코드 매우 쉽게 작성 -> Promise 개념 2가지 패턴 실습# concurrent.futures 사용법1# concurrent.futures 사용법2 GIL : 두 개 이상의 스레드가 동시에 실행 될 때 하나의 자원을 엑세스 하는 ..
[Python] 병행성(Concurrency)(3) - Coroutine 흐름제어 병행성(Concurrency) : 한 컴퓨터가 여러 일을 동시에 수행 -> 단일 프로그램안에서 여러일을 쉽게 해결 병렬성(Parallelism) : 여러 컴퓨터가 여러 작업을 동시에 수행 -> 속도 코루틴(Coroutine) : 단일(싱글) 스레드, 스택을 기반으로 동작하는 비동기 작업 스레드 : OS 관리, cpu 코어에서 실시간, 시분할 비동기 작업 -> 멀티스레드 yield, send : 메인 서브 코루틴 제어, 상태, 양방향 전송 yield from 서브루틴 : 메인루틴에서 호출 -> 서브루틴에서 수행(흐름제어) 코루틴 : 루틴 실행 중 중지 -> 동시성 프로그래밍 코루틴 : 스레드에 비해 오버헤드 감소 스레드 : 싱글스레드 -> 멀티스레드 -> 복잡 -> 공유되는 자원 -> 교착 상태..
[Python] 병행성(Concurrency)(2) - generator # 병렬성(Parallelism) : 여러 컴퓨터가 여러 작업을 동시에 수행 -> 속도# 병행성(Concurrency) : 한 컴퓨터가 여러일을 동시에 수행# -> 단일 프로그램 안에서 여러일을 쉽게 해결# 이터레이터, 제네레이터# Iterator, Generator# 파이썬 반복 가능한 타입# for, collections, text file, List, Dict, Set, Tuple, unpacking, *args Iterator, Generator - 값을 차례대로 가져올 수 있음 ✅ Iterator (이터레이터)"하나씩 값을 꺼낼 수 있는 객체"__iter__()와 __next__() 메서드를 가진 객체for 문, next() 함수와 함께 사용 가능값을 직접 기억하고 관리함 (내부 상태) ✅ G..
[Python] 병행성(Concurrency)(1) - basic iterable 객체 - 반복 가능한 객체iterator 객체 - 값을 차례대로 꺼낼 수 있는 객체 iterable 객체 # 반복 가능한 이유? -> 내부적으로 iter() 함수 호출t = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'# for 반복for c in t: print(c, end=' ') --------------------------------------------[result]A B C D E F G H I J K L M N O P Q R S T U V W X Y Z iterator 객체 a=t.__iter__()print([next(a) for _ in range(len(t))])# ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', ..
[Python] 일급함수(4) - Decorator - 장점중복 제거, 코드 간결, 공통 함수 작성로깅, 프레임워크, 유효성 체크..... -> 공통 기능조합해서 사용 용이 - 단점가독성 감소특정 기능에 한정된 함수는 -> 단일 함수로 작성하는 것이 유리디버깅 불편 Decorator 미사용 샘플 코드 # 데코레이터 실습 - 미사용import timedef perf_clock(func): def perf_clocked(*args): # 함수 시작 시간 st = time.perf_counter() result = func(*args) # 함수 종료 시간 계산 et = time.perf_counter() - st # 실행 함수명 name = func.__nam..
[Python] 일급함수(2,3) - Closure 파이썬의 변수의 범위 # Ex1def func_v1(a): print(a) print(b)# # 예외, 에러가 발생하므로 주석 처리함.# func_v1(10)# NameError: name 'b' is not defined# Ex2, 당연히 10, 20 출력됨.b = 20def func_v2(a): print(a) print(b)func_v2(10)# 10# 20# Ex3c = 30def func_v3(a): c = 40 print(a) print(c)print('>>',c)func_v3(10)print('>>>',c)# >> 30 # 이건 전역 c 값이 30 이므로# 10 # a 는 10이 전달됨# 40 # 내부에 선언된 c 가 40 이므로 40 출..
[Python] 일급함수(1) - 기본 특징 일급함수런타임 초기화 - 실행시첨에 초기화함수를 변수에 할당 가능함수를 다른함수의 인수로 전달 가능함수를 다른함수의 결과로 반환 가능# 함수 객체def factorial(n): '''Factorial Function -> n : int''' if n == 1 : return 1 return n * factorial(n-1)class A: passprint(factorial(5))print(factorial.__doc__), print()print('함수의 타입과 클래스의 타입 비교')print(type(factorial), type(A))print(dir(factorial)), print()print('함수만 가지고 있는 속성들(함수 - 클레스))')print(set(s..