Apresentação
🐍 Python para AI Systems
A DEUS usa Python para praticamente tudo. Domina estes conceitos.
Core Python
Comprehensions
- List:
[x**2 for x in range(10)] - Dict:
{k: v*2 for k, v in d.items()}
Generators
Funções com yield — lazy evaluation, memória eficiente.
Decorators
Funções que modificam outras funções. @cache, @retry, @validate.
Context Managers
with open(...) as f: — __enter__ e __exit__. Gerir recursos.
Typing
typing, pydantic — type hints e validação.
Async Python
async/await
async def— coroutinesawait— esperar I/O sem bloquear
asyncio
Event loop, asyncio.gather(), asyncio.create_task()
Concurrency vs Parallelism
- Concurrency: múltiplas tarefas em progresso (I/O-bound)
- Parallelism: múltiplos CPUs (CPU-bound)
Bibliotecas comuns
- requests / httpx — HTTP (httpx suporta async)
- pydantic — validação e schemas
- dataclasses — classes de dados
Perguntas comuns
Threading vs Multiprocessing
- Threading: threads na mesma memória, GIL limita CPU-bound
- Multiprocessing: processos separados, bypass do GIL, para CPU-bound
O que é GIL?
Global Interpreter Lock — apenas uma thread executa bytecode Python de cada vez. Limita paralelismo CPU em threading.
Quando usar async?
I/O-bound: APIs, DB, ficheiros. Muitas conexões simultâneas sem threads.
Python em sistemas de AI — onde encaixa
- Async para LLM APIs — chamadas a OpenAI/Claude são I/O-bound;
asyncio.gather()para múltiplas chamadas em paralelo - Streaming — generators (
yield) para stream de tokens do LLM sem carregar resposta completa em memória - Pydantic — validação de prompts, respostas estruturadas, schemas de tools
- Context managers — gerir conexões a vector DBs, garantir cleanup
Erro comum: misturar sync e async
requestsbloqueia o event loop — usarhttpx.AsyncClientpara chamadas HTTP async- Não chamar
time.sleep()em código async — usarasyncio.sleep() - Bibliotecas síncronas em async:
run_in_executor()para não bloquear
asyncio.gather vs create_task
- gather: espera várias coroutines, devolve resultados em ordem.
results = await asyncio.gather(task1(), task2()) - create_task: agenda coroutine sem esperar. Útil para fire-and-forget ou quando precisas de controlo fino
Zona de prática
Sem perguntas. Clica em Editar para adicionar.