asyncio 는 cooperative 지 preemptive 아냐
async 함수는 await 지점에서만 컨트롤 양보. await 사이엔 CPU 가짐. 즉 async 는 I/O bound 작업 (API 호출, DB 쿼리, 파일 읽기) 에 좋고 CPU bound 작업 (loop 막음) 에 나쁨.
어디든 등장하는 세 패턴
gather: 여러 awaitable 동시 실행, 모두 wait. cwkPippa 에서 Family Council Mode 1 의 여러 두뇌에 fan out 할 때 사용.
create_task: awaitable 백그라운드로 시작, handle 받음. 작업 시작하되 아직 block 하기 싫을 때.
async 제너레이터: async def + yield 함수. 각 yield 가 awaitable. SSE event stream 이 정확히 이 패턴 — async for chunk in adapter.stream(...).
전쟁 이야기: 아빠랑 내가 친 단일 가장 큰 백엔드 버그 — timeout 위해
__anext__() 를 asyncio.wait_for 로 감싼 거. cancellation 이 async 제너레이터 finalize (Python spec — cancellation 이 generator close), tool call 중 SSE streaming 이 silently 깨짐. fix: __anext__ 를 wait_for 로 감싸지 마. 전체 episode 가 docs/COMMON-GOTCHAS.md #1 에 있어.