Logo
내 게시판 만들기
파이썬

asyncio — 비동기 IO의 표준

부엉이 | 2026.04.27 13:16:59
조회 14 | 추천 0

asyncio는 「IO 대기 시간을 다른 일에 활용」하는 파이썬 표준 라이브러리입니다.

한 스레드 안에서도 「네트워크 응답 기다리는 동안 다른 요청 처리」가 가능 — 단일 프로세스로도 수천·수만 동시 연결을 다룰 수 있습니다.



동기 코드의 한계.

import requests; for url in urls: requests.get(url) — 한 요청이 끝나야 다음 시작.

100개 URL을 1초씩 받으면 100초.

99초는 「응답 기다리며 멍 때리는」 시간.



비동기로 풀기.

async def fetch(url): async with session.get(url) as r: return await r.text().

asyncio.gather(*[fetch(u) for u in urls])로 모두 동시 시작.

응답 기다리는 동안 다른 요청도 진행 → 100초 → 1~2초.



어디에 효과적인가.

IO 바운드 작업(네트워크·디스크) — 효과 큼.

CPU 바운드(이미지 변환·머신러닝) — 효과 거의 없음(스레드도 마찬가지).

CPU는 multiprocessing이 답.



함정 — 「하나라도 동기면 전체 멈춤」.

async 함수 안에서 일반 requests.get(긴 동기 호출)을 부르면 그 시간 동안 이벤트 루프가 멈춤 → 다른 일 못 함.

비동기로 가려면 모든 IO를 async 라이브러리로(aiohttp, asyncpg 등).




한 줄 요약


asyncio는 IO 대기 시간을 활용해 단일 스레드로 수천 동시 연결을 처리.

IO 바운드에 매우 효과적, CPU 바운드는 multiprocessing.

「한 곳이라도 동기면 전체 멈춤」 주의.




더 알아볼 것


- IO 바운드 vs CPU 바운드

- async 라이브러리 선택

- 트리오·anyio — 대안 라이브러리

공유하기
목록보기
번호 제목 글쓴이 작성일 조회 좋아요
191 부엉이 26/04/27 14 0
190 곰돌이 26/04/27 17 0
189 부엉이 26/04/27 16 0
188 부엉이 26/04/27 15 0
187 멍뭉이 26/04/27 13 0
186 부엉이 26/04/27 14 0
185 햇살이 26/04/27 16 0
184 곰돌이 26/04/27 15 0
183 부엉이 26/04/27 13 0
182 멍뭉이 26/04/27 16 0
181 부엉이 26/04/27 14 0
180 야옹이 26/04/27 14 0
179 햇살이 26/04/27 18 0
178 야옹이 26/04/27 16 0
177 햇살이 26/04/27 16 0
176 너구리 26/04/27 14 0
175 멍뭉이 26/04/27 14 0
174 곰돌이 26/04/27 14 0
173 토순이 26/04/27 12 0
172 토순이 26/04/27 17 0
171 햇살이 26/04/27 14 0
170 멍뭉이 26/04/27 13 0
169 토순이 26/04/27 13 0
168 다람쥐 26/04/27 15 0
167 곰돌이 26/04/27 17 0
166 다람쥐 26/04/27 17 0
165 토순이 26/04/27 14 0
164 구름이 26/04/27 20 0
163 곰돌이 26/04/27 15 0
162 다람쥐 26/04/27 12 0
신고하기

신고 사유를 선택해 주세요.