「await로 기다리지 않고, 일단 시작만 시키고」 다른 일을 하다가 나중에 결과를 받고 싶을 때 create_task를 씁니다.
fire-and-forget 또는 백그라운드 작업 패턴.
기본 사용.
task = asyncio.create_task(fetch(url)) — 즉시 실행 시작, task 객체 반환.
나중에 result = await task로 결과 수령.
사이의 시간 동안 다른 일 자유.
활용 예.
응답 후 백그라운드 정리.
async def handle_request(req): result = process(req); asyncio.create_task(log_to_db(result)); return result.
log_to_db는 백그라운드, 응답은 즉시.
주의 — 참조 유지.
만들어진 task 객체를 어딘가에 보관해야 합니다.
변수가 사라지면 가비지 컬렉터가 task를 정리해 버려 작업이 도중에 사라질 수 있음 — 「Task was destroyed」 경고 발생.
Python 3.11+ TaskGroup.
async with asyncio.TaskGroup() as tg: tg.create_task(t1); tg.create_task(t2).
그룹 안의 모든 태스크 자동 대기 + 하나 실패 시 다른 것도 취소 + 모든 예외 모아서 보고.
gather보다 안전한 모던 패턴.
한 줄 요약
create_task는 즉시 시작 + 나중에 결과 수령.
백그라운드 작업·fire-and-forget에 유용.
참조 유지 필수, Python 3.11+는 TaskGroup이 더 안전한 모던 패턴.
더 알아볼 것
- fire-and-forget의 위험
- background_tasks 참조 보관
- FastAPI BackgroundTasks