Asyncio pydispatch (Signal Manager)
This is based on pyDispatcher reference Django Signals and reference scrapy SignalManager implementation on Asyncio
You can bind multiple listeners (called sender) to listening multiple handlers (called receiver) on one event (called signal).
Default, the listener is None, so when the event is fire with no listener, all handlers will be executed that was bind default listener.
Most of the program has start
and stop
events, we can register some handler to events,
we can also specify a sender.
import asyncio
from aio_pydispatch import Signal
server_start = Signal()
server_stop = Signal()
def ppp(value: str, **kwargs) -> None:
print(value, kwargs)
async def main():
server_start.connect(ppp, sender='loading config')
server_stop.connect(ppp)
await server_start.send(sender='loading config', value='foo')
await asyncio.sleep(1)
await server_stop.send(value='foo')
if __name__ == '__main__':
asyncio.run(main())
sync:
async: