PyDispatcher

2.0.7 · active · verified Fri Apr 10

PyDispatcher is a multi-producer, multi-consumer in-memory signal dispatch system for Python. It provides a robust mechanism for event routing, originally extracted from Django's dispatch module. Primarily maintained by Mike Fletcher, the library is currently at version 2.0.7 and sees infrequent but ongoing updates.

Warnings

Install

Imports

Quickstart

This example demonstrates how to define a signal, connect multiple receiver functions to it (including one that expects specific keyword arguments), and send the signal from a custom sender object. It also shows how to disconnect a receiver.

from pydispatch import dispatcher

# Define a signal name (can be any hashable object)
MY_SIGNAL = 'my_custom_event'

def my_receiver(sender, **kwargs):
    """A function to receive the signal."""
    print(f"Receiver got signal from {sender}: {kwargs}")

def another_receiver(sender, data, event_type, **kwargs):
    """Another receiver that expects specific keyword args."""
    print(f"Another receiver got signal from {sender}: data={data}, type={event_type}")

class MySender:
    def __init__(self, name):
        self.name = name

    def trigger_event(self):
        print(f"\n{self.name} is sending MY_SIGNAL...")
        # Send the signal, specifying the sender and any keyword arguments
        dispatcher.send(signal=MY_SIGNAL, sender=self, data='important data', event_type='click')

# Connect receivers to the signal
# Use dispatcher.Any to receive signals from any sender
dispatcher.connect(receiver=my_receiver, signal=MY_SIGNAL, sender=dispatcher.Any)
dispatcher.connect(receiver=another_receiver, signal=MY_SIGNAL, sender=MySender)

# Create a sender instance and trigger the event
sender_instance = MySender(name="ComponentA")
sender_instance.trigger_event()

# Disconnect a receiver (optional)
dispatcher.disconnect(receiver=my_receiver, signal=MY_SIGNAL, sender=dispatcher.Any)

view raw JSON →