🎓 A1Learner
🔍
0 of 47 lessons completed

Publish and Subscribe

Publish and subscribe is a pattern where one publisher sends an event and every subscriber receives a copy. A subscriber receives only the events sent after it subscribes.

One event reaches three subscribers

The publisher sends one event to every name on the subscriber list. Each subscriber stores the event in its own list.

subscribers = {"subscriber-1": [], "subscriber-2": [], "subscriber-3": []}
event = "event-1"
for name in subscribers:
    subscribers[name].append(event)
for name in subscribers:
    print(name, "received:", subscribers[name])

A late subscriber misses the old event

A fourth subscriber signs up after the first event was sent. Its list stays empty, because that event already passed.

subscribers = {"subscriber-1": [], "subscriber-2": [], "subscriber-3": []}
for name in subscribers:
    subscribers[name].append("event-1")
subscribers["subscriber-4"] = []
for name in subscribers:
    print(name, "received:", subscribers[name])

The next event reaches all four subscribers

A second event is sent after the fourth subscriber joined. Every list gains the new event, and the fourth list holds only that one.

subscribers = {"subscriber-1": ["event-1"], "subscriber-2": ["event-1"], "subscriber-3": ["event-1"], "subscriber-4": []}
for name in subscribers:
    subscribers[name].append("event-2")
for name in subscribers:
    print(name, "received:", subscribers[name])

Example

subscribers = {"subscriber-1": [], "subscriber-2": [], "subscriber-3": []}
for name in subscribers:
    subscribers[name].append("event-1")
subscribers["subscriber-4"] = []
for name in subscribers:
    subscribers[name].append("event-2")
for name in subscribers:
    print(name, "received:", subscribers[name])
print("Subscribers holding event-1:", sum(1 for name in subscribers if "event-1" in subscribers[name]))

Key points

  • Publisher: the program that sends an event to all current subscribers.
  • Subscriber: a program that signs up to receive events from a publisher.
  • Event: a short message that reports something that happened.
  • Publish and subscribe: each event goes to every subscriber, not to just one.
  • Difference from a queue: a queue hands each job to one worker, while an event goes to every subscriber.

In this example, the first event reaches only the three early subscribers, and the second event reaches all four. The late subscriber never receives the event that was sent before it joined.

Note

subscribers act on their own copies, so one slow subscriber does not block the others.

Try it Yourself

Edit the code, then press Run.

Running is simulated

Exercise

How does publish and subscribe differ from a message queue?