asyncio로 동시성 다루기
pingulee조회 0 · 댓글 0
CPU가 아니라 네트워크·디스크를 기다리는 작업이라면 asyncio가 답이다.
import asyncio, aiohttp
async def fetch(session, url):
async with session.get(url) as r:
return await r.text()
async def main(urls):
async with aiohttp.ClientSession() as s:
return await asyncio.gather(*(fetch(s, u) for u in urls))스레드와 뭐가 다른가
GIL 때문에 파이썬 스레드는 CPU 작업에서 진짜 병렬이 안 된다. 하지만 I/O 대기 중엔 GIL을 놓으므로, I/O 바운드에선 asyncio도 스레드도 잘 동작한다. asyncio는 컨텍스트 스위칭 비용이 더 싸다.
댓글 0
첫 댓글을 남겨보세요.