IT/Python +Django

    파이썬 비동기 - async

    파이썬 비동기 - async

    순차 처리를 했을 경우 import timeit from urllib.request import urlopen urls = ['http://daum.net', 'https://google.com', 'https://apple.com', 'https://tistory.com', 'https://github.com/', 'https://gmarket.co.kr/'] start = timeit.default_timer() # 순차 실행부 for url in urls: print('Start', url) urlopen(url) print('Done', url) # 완료시간 - 시작시간 duratio..

    파이썬 Concurrency - Future

    파이썬 Concurrency - Future

    동시성 개념 비동기 작업 쓰레드풀 실습 프로세스풀 실습 블록 / 논블록 서로 다른 스레드 또는 프로세스에서 실행가능하다. 내부 과정 알 필요 없으며, 고수준으로 인터페이스를 제공 from concurrent import future ProcessPoolExecutor : GIL 우회, 내부적으로 os.cpu_count() 를 사용 ThreadPoolExecutor: GIL 종속 Python GIL (Global Interpreter Lock) GIL 은 한 번에 하나의 스레드만 수행 할 수 있게 인터프리터 자체에서 락을 거는 것. 예를들어 하나의 변수에 여러개의 스레드가 접근 하는 경우 데드락 같은게 발생할 수 있음 from concurrent import future worker = 10 #스레드수 #..

    파이썬 코루틴 Coroutine

    파이썬 코루틴 Coroutine

    Coroutine 의 개념 yield 키워드 : 메인 루틴과 서브 루틴의 연결 기능을 해준다. 멈춰있다가 다음 루틴을 제어 코루틴의 제어, 코루틴 상태, 양방향 값 전송을 알아본다. yield from 코루틴 서브 루틴 : 메인 루틴에서 리턴에 의해 호출 부분으로 돌아와 다시 프로세스 쓰레드 : 지금까지 해온것은 싱글 쓰레드 작업, 멀티 쓰레드는 공유 자원의 교착 상태를 관리해야 하기 때문에 복잡하다. 컨텍스트 스위칭 비용 발생과 자원 소비 비용 고려 코루틴 루틴 실행 중 멈춤 가능, 특정 위치로 돌아갔다가 다시 원래 위치로 돌아와 수행 비동기 처리 방식으로 동시성 프로그래밍을 구현할 수 있다. 코루틴은 제너레이터를 기반으로 작동함 코루틴은 스케쥴링 오버헤드가 매우 적다. (= 컨텍스트 스위칭 비용이 적..

    파이썬 제너레이터

    파이썬 제너레이터

    반복 가능한 객체 (iterable object) 반복형 객체(for, collections, text file, List, Dict, Set, Tuple, unpacking, *args) 반복형 객체는 내부적으로 iter(x) 함수를 호출한다. yield from t = 'ABCDEF' # while 사용 w = iter(t) while True: try: print(next(w)) except StopIteration: # next() 가 더 이상 없음 break # 반복형 확인 print(hasattr(t, '__iter__')) # True print(isinstance(t, abc.Iterable)) # True next() 를 사용하는 순회 객체 클래스에 매직 메소..

    파이썬 클래스 특별 메소드

    파이썬 클래스 특별 메소드

    iter 메소드가 있다는 것은 for를 사용해 순회하며 next() 를 이용 한다는 것! __x 등 과 같이 더블 언더스코어 변수는 private 하다. 파이썬 코드 컴벤션 # 프로퍼티 메타 디스크립션. 데코레이터를 활용한 디스크립션이 걸리는것. # class 선언 class VectorP(object): # private 선언 def __init__(self, x, y): self.__x = float(x) self.__y = float(y) def __iter__(self): return (i for i in (self.__x, self.__y)) # Generator # @property 마치 getter @property def x(self): return self.__x # @x.setter 는..

    파이썬 Reference참조형

    파이썬 Reference참조형

    파이썬은 콜바이오브젝트 형식을 따르지만 다른 언어와 같이 참조형의 특징을 가지는 경우가 있다. eq와 id 비교의 경우 x = {'name':'kim', 'age':20} y = x print(id(x), id(y)) # 3186614069352 3186614069352 로 똑같이 출력 된다. print(x == y) # True print(x is y) # True x['city': 'seoul'] # 둘 다 추가됨 print(x, y) # {'name': 'kim', 'age': 20, 'city': 'seoul'} {'name': 'ki..