물론 실제 서버를 운영할 때 notebook에서 fastapi server를 실행하면 안됩니다.
하지만 unittest나 간단한 서버 테스트를 위해 fastapi를 노트북에서 실행하고 싶을 때가 있죠.
그럴 때 nest_asyncio
를 사용하면, 간단하게 FastAPI를 노트북에서 사용할 수 있습니다.
https://github.com/erdewit/nest_asyncio
Python의 비동기모듈 asyncio는 기본적으로 Event loop의 중첩을 허용하지 않습니다.
여기서 이벤트 루프 는 위 그림처럼 비동기적으로 Task를 처리하는 핵심 주체라고 생각하면 됩니다.
nest asyncio는 이 asyncio를 패치해서, 중첩으로 Event loop를 부를 수 있도록 수정한 버전이라고 생각하면 됩니다.
거시적인 관점에서의 asyncio의 중첩 event loop 허용은 스케줄링이나 코루틴 관리가 더 복잡해진다는 단점도 많지만,
우리는 간단하게 노트북에서 테스트용으로 쓸 거 니까요..!
걱정말고 사용해봅시다.
+) nest asyncio 갑론을박이 궁금하신 분들은..
https://github.com/erdewit/nest_asyncio/issues/36
pip install nest_asyncio
import nest_asyncio
import uvicorn
nest_asyncio.apply()
uvicorn.run(app)