Tutorial usando Fast API no modo assíncrono no Colab.
Não sou expert em Python, sendo mais exato eu aprofundei meus conhecimentos nessa poderosa tecnologia para soluções web aqui na DIO. O uso que eu fazia antes do Python era voltado para Dados e IA por meio do Colab da Google, recentemtne vi que também é totalmente possível usar o FastAPI no modo assíncrono nesse ambiente da Google. Inclusive, o FastAPI é construído com base em asyncio ( a biblioteca de programação assíncrona nativa do Python ) cuja documentação está disponível em https://docs.python.org/3/library/asyncio.html, o que o torna ideal para lidar com requisições concorrentes e operações de I/O de forma eficiente. No entanto, existem algumas considerações e passos adicionais para fazer isso funcionar corretamente no Colab, que aprendi após algumas pesquisas e erros tomados no Colab:
- Colab e Servidores Web: O Google Colab é um ambiente de notebook e não foi projetado para rodar servidores web diretamente na porta padrão. Por isso, você precisará de uma ferramenta como o ngrok, a qual faço já uso há 4 anos e recomendo quem não usa procurar saber mais em https://ngrok.com/docs, para expor sua aplicação FastAPI na internet, gerando uma URL pública.
- nest_asyncio
: Jupyter notebooks (incluindo o Colab) já executam um loop de eventos asyncio
em segundo plano. Tentar iniciar um novo loop com uvicorn.run()
diretamente pode gerar um erro RuntimeError: asyncio.run() cannot be called from a running event loop. Para contornar isso, você pode usar a biblioteca nest_asyncio
, que permite o uso aninhado de asyncio.run()
.
Passos para rodar FastAPI assíncrono no Colab:
1. Instale as seguintes bibliotecas: !pip install fastapi uvicorn nest-asyncio pyngrok -q
2. Configure o ngrok:
- Em https://ngrok.com/ crie uma conta, inclusive usando suas credenciais do google.
- Obtenha seu authtoken
no dashboard do ngrok.
- No seu notebook Colab, defina o authtoken
(veja a tela abaixo):
from pyngrok import ngrok
authtoken = "SEU_AUTHTOKEN_AQUI"
ngrok.set_auth_token(authtoken)
3. Crie um App em FastAPI:
from fastapi import FastAPI
import asyncio
import nest_asyncio
import uvicorn
app = FastAPI()
@app.get("/async_data")
async def get_async_data():
await asyncio.sleep(5)
return {"message": "Retorno: Dados assíncronos!"}
@app.get("/hello")
async def hello_world():
return {"message": "Olá, esse é meu app em FastAPI assíncrono no Colab!"}
4. Rode o servidor FastAPI com nest_asyncio e ngrok:
4. Rode o servidor FastAPI com nest_asyncio e ngrok:
nest_asyncio.apply()
# Expor o servidor local para a internet usando ngrok
public_url = ngrok.connect(8000)
print("URL Pública do FastAPI:", public_url)
# Rodar o Uvicorn. O loop de eventos já está em execução graças ao nest_asyncio.
# Você pode rodar isso em uma thread separada ou usar a função Server para mais controle.
# Uma forma comum é rodar em uma thread para não bloquear a execução do notebook:
import threading
def run_uvicorn():
uvicorn.run(app, host="0.0.0.0", port=8000)
thread = threading.Thread(target=run_uvicorn)
thread.start()
# O servidor estará rodando em segundo plano.
# Você pode agora acessar a URL pública fornecida pelo ngrok.