Serviços em background¶
Existem casos onde você precisa executar código em paralelo a sua aplicação, por exemplo, para escutar uma fila de mensageria.
Zayt provê o decorator zayt.web.background para marcar funções para serem executadas em background como tasks assíncronas junto à aplicação principal.
from zayt.web import background
@background
async def background_service():
...
Funções de serviços em background podem receber serviços como parâmetros do sistema de injeção de dependências.
Por exemplo, você pode criar uma função que escuta notificações do Redis:
import structlog
from redis.asyncio import Redis
from zayt.web import background
logger = structlog.get_logger(__name__)
@background
async def listen_channel(redis: Redis):
async with redis.pubsub() as pubsub:
await pubsub.psubscribe("chat")
while True:
message = await pubsub.get_message(
ignore_subscribe_messages=True,
timeout=None
)
if message:
logger.info(
"chat message",
value=message["data"].decode(),
)