분류 전체보기 (667) 썸네일형 리스트형 [Python] I/O Bound(2) - Asyncio basic 비동기 기초 샘플 코드 동시 프로그래밍 패러다임 변화 싱글코어 -> 처리향상 미미, 저하 -> 비동기 프로그래밍 -> CPU연산, DB연동, API호출 대기 시간 늘어남 => 논블로킹으로 변환 파이썬에서 비동기 프로그래밍은 개념을 잘 잡아야 함. 파이썬 3.4에서 비동기(asyncio) 표준라이브러리 등장 import time import asyncio async def exe_calculate_async(name, n): for i in range(1, n + 1): print(f'{name} -> {i} of {n} is calculating..') # time.sleep(1) # 동기 처리, 시간비교하기 좋음 await asyncio.sleep(1) # 비동기 처리, 시간비교하기 좋음 print(f.. [Python] I/O Bound(2) - Multiproecessing 통신관련 멀티프로세스 처리(동기방식) import multiprocessing import requests import time # 각 프로세스 메모리 영역에 생성되는 객체(독립적) # 함수 실행 할 때 마다 객체 생성은 좋지 않음. -> 각 프로세스마다 할당 session = None def set_global_session(): global session if not session: session = requests.Session() print('>>> not session()') def request_site(url): # 세션 확인 print(session) # print(session.headers) with session.get(url) as response: name = multiproces.. [Python] I/O Bound(2) - Multithreading 통신관련 멀티스레드 처리(동기방식) import concurrent.futures import threading import requests import time # 각 스레드에 생성되는 객체(독립된 네임스페이스) thread_local = threading.local() # 세션 제공 def get_session(): if not hasattr(thread_local, "session"): # 딕셔너리 타입으로 확인 thread_local.session = requests.Session() print('>>> not hasattr()') return thread_local.session def request_site(url): # 세션 획득 session = get_session() # 세션 확인 pr.. [Python] I/O Bound(1) - Synchronous 통신관련 동기 처리 import requests import time def request_site(url, session): # checking session # print(session) # print(session.headers) with session.get(url) as response: print(f"[Read contents: {len(response.content)}, Status code: {response.status_code} from {url}") def request_all_site(urls): with requests.Session() as session: for url in urls: request_site(url, session) def main(): urls = [ "htt.. [Python] Blocking vs Non-Blocking, Sync vs Async Blocking vs Non-blocking Blocking - 시스템 콜 요청시 -> 커널 IO 작업 완료 시 까지 응답 대기 - 제어권(IO작업) -> 커널 소유 -> 응답(Response)전 까지 대기(Block) -> 다른 작업 수행 불가(대기) Non-blocking - 시스템 콜 요청시 -> 커널 IO 작업 완료 여부 상관없이 즉시 응답 - 제어권(IO작업) -> 유저 프로세스 전달 -> 다른 작업 수행 가능(지속) -> 주기적 시스템 콜 통해서 IO 작업 완료 여부 확인 Async vs Sync Sync : IO 작업 완료 여부에 대한 Noty는 유저프로세스(호출하는 함수) -> 커널(호출되는 함수) Async : IO 작업 완료 여부에 대한 Noty는 커널(호출되는 함수) -> 유저프로세스.. [Python] Multiprocessing(5) - Queue, Pipe 프로세스 통신 - Queue 방식 from multiprocessing import Process, Queue, current_process import time import os # 실행 함수 def worker(id, baseNum, q): process_id = os.getpid() process_name = current_process().name print(f"Process ID: {process_id}, Process Name: {process_name}") # 누적 sub_total = 0 # 계산 for i in range(baseNum): sub_total += 1 # time.sleep(0.1) # Produce q.put(sub_total) # 정보 출력 print(f"*** Sub .. [Python] Multiprocessing(4) - Sharing state 멀티 프로세스 자원공유(Value 방식) 샘플 코드 # 프로세스 동기화(공유) # 값을 하나만 공유할때-Value, 리스트타입으로 공유할때-Array from multiprocessing import Process, current_process, Value, Array import random import os # 프로세스 메모리 공유 예제(공유 O) # 프로세스 동기화 관련 참고 # https://docs.python.org/3/library/multiprocessing.html#synchronization-between-processes # 실행 함수 def generate_update_number(v : int): with v.get_lock(): # lock 을 이용한 자료 공유 for i in .. [Python] Multiprocessing(3) - ProcessPoolExecutor ProcessPoolExecutor 을 이용한 샘플 코드 - 여러 사이트 크롤링 샘플 코드 from concurrent.futures import ProcessPoolExecutor, as_completed import urllib.request # 조회 URLS, url 이 정상동작 안하면 오류 발생 URLS = [ 'https://www.daum.net/', 'http://www.cnn.com/', 'https://naver.com/', 'http://www.bbc.co.uk/', 'http://ruliweb.com' ] # 실행 함수 def load_url(url, timeout): with urllib.request.urlopen(url, timeout=timeout) as conn: return.. 이전 1 ··· 78 79 80 81 82 83 84 다음 목록 더보기