Python 4

Python - 비동기 프로그래밍 실전 적용

Python 비동기 라이브러리 asyncio: 표준 비동기 이벤트 루프. async/await 기반 aiohttp: 비동기 HTTP 요청 처리. requests 비동기 버전 aiofiles: 비동기 파일 I/O. open() 대신 aiofiles.open() aiomultiprocess: asyncio + multiprocessing. CPU 바운드용 trio / curio: asyncio 대체. 현대적 구조(nursery) httpx.AsyncClient: aiohttp 대체 가능. requests 스타일 + async크롤링 Task 구조 요약 콘텐츠 단위로 유저 데이터 수집 작품별 회차 수 다름 (예: 1~100화 vs 1~57화) 회차별 데이터 수량 다름 (예: 1화=1000개, 2..

Python - 비동기 프로그래밍(asynchronous programming) 원리 및 주요 개념

동시성과 병렬성: Python에서의 성능 향상 접근법1. 접근 방법 개요 asyncio: 코루틴 기반 비동기 프로그래밍 (I/O 바운드, 싱글 코어) threading: 멀티스레드 기반 동시성 (GIL로 인해 병렬 아님) multiprocessing: 다중 프로세스 기반 병렬 처리 (CPU 바운드 적합)2. async / await 키워드 사용 조건 async def 함수는 coroutine 객체를 반환 await는 오직 awaitable 객체만 가능 (coroutine, Task, Future, __await__ 구현 객체)async def fetch_data(): return "data"async def main(): result = await fetch_data() # fetc..

Python - GIL와 메모리 관리

파이썬 GIL와 메모리 관리1. GIL (Global Interpreter Lock)이란? CPython 인터프리터는 한 번에 하나의 쓰레드만 바이트코드를 실행할 수 있도록 제한하는 전역 락(GIL)을 사용합니다. 모든 쓰레드는 GIL을 획득해야만 실행 가능 ❌ 문제: 여러 쓰레드가 동시에 참조 카운트를 조작하면 메모리 오류 발생 가능 ✔ 해결: GIL을 통해 바이트코드 실행을 직렬화하여 안전 보장2. 멀티쓰레딩은 못 쓰나? CPU 바운드 작업에서는 GIL로 인해 성능 향상 거의 없음. I/O 바운드 작업(네트워크, 파일, DB 등)은 GIL이 자동 해제되어 효과 있음 ✔ 대안: 멀티프로세싱, C 확장, async/await 활용3. GIL의 동작 방식 - 쓰레드는 GIL을 획득해야 Pyt..

Python - 파이썬이 돌아가는 원리

파이썬 프로그램이 돌아가는 원리1. 소스 코드 작성 (.py 파일) 사람이 읽을 수 있는 텍스트 코드 print("Hello, world!") ✔ 설명: .py 확장자 파일로 저장2. 인터프리터가 소스 코드 읽음 python hello.py 실행 시 인터프리터 동작 ✔ 설명: 기본 구현체는 CPython3. 파서 → 바이트코드 생성 문법 분석 후 AST 생성 AST를 바이트코드로 컴파일 ✔ 설명: .pyc 파일로 캐싱 가능4. Python VM이 바이트코드 실행 바이트코드 한 줄씩 해석 객체 생성, 변수 할당, 연산 수행5. 런타임 동작 - 메모리 관리 (GC) - 예외 처리 - 동적 타이핑 및 흐름 제어6. 결과 출력 또는 에러 발생 정상 실행 시 출력 예외 발생 시 Trac..