Microframework para escrever workers assíncronos em Python
Project description
async-worker
O projeto tem como objetivo ser um framework para escrever workers assíncronos em python. Por worker entende-se qualquer aplicação que rode por tempo indeterminado e que receba estímulos de várias origens diferentes. Essas orignes podem ser:
- Uma mensagem em um broker, como RabbitMQ;
- Um evento recorrente gerado em um intervalo fixo de tempo;
- Uma requisição HTTP
- ...
Documentação: https://async-worker.github.io/async-worker/
Exemplos rápidos
Abaixo estão alguns exemplos bem simples que dão uma ideia do projeto e de como fica um código escrito com async-worker.
Handler HTTP
from aiohttp import web
from asyncworker import App
app = App()
@app.http.get(["/", "/other"])
async def handler():
return web.json_response({})
app.run()
Esse handler recebe reqisições HTTP (GET
) nos seguintes endereços (por padrão): http://127.0.0.1:8080/
e http://127.0.0.1:8080/other
Handler RabbitMQ
from typing import List
from asyncworker import App
from asyncworker.connections import AMQPConnection
from asyncworker.options import Options
from asyncworker.rabbitmq import RabbitMQMessage, AMQPRouteOptions
amqp_conn = AMQPConnection(
hostname="127.0.0.1",
username="guest",
password="guest",
prefetch_count=1024,
)
app = App(connections=[amqp_conn])
@app.amqp.consume(
["queue", "queue-2"], options=AMQPRouteOptions(bulk_size=512)
)
async def handler(messages: List[RabbitMQMessage]):
print(f"Received {len(messages)} messages")
for m in messages:
await amqp_conn.put(
data=m.body, exchange="other", routing_key="another-routing-key"
)
@app.run_every(1)
async def produce(app: App):
await amqp_conn.put(data={"msg": "ok"}, routing_key="queue")
app.run()
Esse handler recebe mensagens das filas queue
e queue-2
em lotes de 512 mensagens. Se essas duas filas demorarem mais de 60 segundos para acumular, juntas, 1024 mensagens o handler será chamado imediatamente com a quantidade de mensagens que estiver disponível no momento.
O que esse handler está fazendo é apenas pegar todas as mensagens que ele recebe e enviar para o exchange="", routing_key="queue"
.
Logo created with DesignEvo logo maker
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file async-worker-0.20.2.tar.gz
.
File metadata
- Download URL: async-worker-0.20.2.tar.gz
- Upload date:
- Size: 36.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.11.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 7790124701b6ecda09559a4d6a3246f039fa244efdc2abcad109eef526da62d7 |
|
MD5 | 75be36b9ee594f52037943f0ad473d64 |
|
BLAKE2b-256 | a57fa0be3884c5707776e0a9303b81c2b2ce3b88510b14d56c775ccd5dbf4815 |