No project description provided
Project description
Asyncio Signal Bus
Asyncio Signal Bus is a simple utility for sending publisher subscriber signals from one python function to another, thus allowing you to simplify asynchronous applications using event based architecture.
Installation
Install with pip.
pip install asyncio-signal-bus
Usage
Simply annotate your publishers and subscribers to pass any data type asynchronously whenever the publisher returns a value.
import asyncio
from asyncio_signal_bus import SignalBus
import json
from typing import Dict
BUS = SignalBus()
@BUS.publisher(topic_name="foo")
async def foo_publisher(arg: str):
signal = {"message": arg}
print(f"publishing {json.dumps(signal)}")
await asyncio.sleep(1)
return signal
@BUS.subscriber(topic_name="foo")
async def foo_subscriber_0(signal: Dict):
print(f"foo subscriber 0 received {json.dumps(signal)}")
@BUS.subscriber(topic_name="foo")
async def foo_subscriber_1(signal: Dict):
print(f"foo subscriber 1 received {json.dumps(signal)}")
In order to start the subscribers listening, you use the bus context. When the bus leaves context, all subscribers stop listening.
async def main():
inputs = [f"message:{i}" for i in range(10)]
async with BUS:
await asyncio.gather(*[foo_publisher(x) for x in inputs])
That is it! You can string together publishers and subscribers in whatever way you want. You can also annotate functions and methods used for other purposes as publishers in order to facilitate post processing and reporting hooks without having to pass them to the function.
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
Built Distribution
Hashes for asyncio_signal_bus-0.2.0-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 300adabcf6ab5f664380b3f6d47567af52dab412a0814b529c53c2cc5691478c |
|
MD5 | 7fd8972b354feb5b027f670e82ae86d9 |
|
BLAKE2b-256 | f5d6f861af4bb74966b7636d3fea8683710e58de5b2acc876e14a0a787c72f5c |