~/pingulee

asyncio로 동시성 다루기

pingulee조회 0 · 댓글 0

asyncio로 동시성 다루기

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

첫 댓글을 남겨보세요.