Skip to content

whg517/aio-pydispatch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

b31837b · Dec 24, 2021

History

56 Commits
Dec 24, 2021
Dec 24, 2021
Dec 24, 2021
Jul 21, 2020
Jul 24, 2020
Dec 24, 2021
Dec 24, 2021
Dec 24, 2021
Dec 24, 2021
Dec 24, 2021
Jul 21, 2020
Dec 24, 2021

Repository files navigation

aio_pydispatch

GitHub Workflow Status (branch) GitHub PyPI codecov Codacy Badge

Asyncio pydispatch (Signal Manager)

This is based on pyDispatcher reference Django Signals and reference scrapy SignalManager implementation on Asyncio

Event or Signal (not python bif signal)

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.

Usage

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())

Similar design

sync:

async:

Others

Event system in Python