A simple wrapper around PyZMQ that provides an easy interface to Publish Subscribe.
Project description
🗞️ EasyPubSub
EasyPubSub is a simple wrapper around PyZMQ that provides an easy interface to the PubSub (Publish-Subscribe) functionality of ZeroMQ.
In PubSub, a publisher publishes a message to a topic and a subscriber subscribes to that topic and receives the message. In EasyPubSub, publishers and subscribers connect to each other via a proxy, which acts as intermediary between them. For more information regarding PubSub, see Wikipedia.
Get started
EasyPubSub can be installed via pip
:
pip install easypubsub
Proxy
Now let's start a proxy (code from examples/example_proxy.py
):
import time
from easypubsub.proxy import Proxy
PUBLISHERS_ADDRESS = "tcp://127.0.0.1:5555"
SUBSCRIBERS_ADDRESS = "tcp://127.0.0.1:5556"
proxy = Proxy(PUBLISHERS_ADDRESS, SUBSCRIBERS_ADDRESS)
proxy.launch()
try:
while True:
time.sleep(0.1)
except KeyboardInterrupt:
proxy.stop()
This starts a proxy (stoppable with CTRL-C
) that allows publishers to publish messages to PUBLISHERS_ADDRESS
and subscribers to subscribe to topics on SUBSCRIBERS_ADDRESS
. By using a proxy, publishers and subscribers can connect to each other without having to know each other's addresses.
Publisher
Let's create a publisher that every ten seconds announces one random number (code from examples/example_publisher.py
):
import random
import time
from easypubsub.publisher import Publisher
PUBLISHERS_ADDRESS = "tcp://127.0.0.1:5555"
PUBLISH_INTERVAL = 10 # seconds.
publisher = Publisher("lottery", PUBLISHERS_ADDRESS, default_topic="winning_number")
try:
while True:
publisher.publish(message=random.randint(1, 100))
time.sleep(PUBLISH_INTERVAL)
except KeyboardInterrupt:
pass
Subscriber
Now we can create a subscriber that prints the winning number every time it receives one (code from examples/example_subscriber.py
):
import time
from easypubsub.subscriber import Subscriber
SUBSCRIBERS_ADDRESS = "tcp://127.0.0.1:5556"
subscriber = Subscriber("lottery_player", SUBSCRIBERS_ADDRESS)
try:
while True:
result = subscriber.receive()
if len(result) > 0:
print("Received:")
for topic, message in result:
print(f"{topic}: {message}")
else:
# No message received.
time.sleep(1.0)
except KeyboardInterrupt:
pass
There can be many publishers and subscribers connected to the same proxy, try starting a few of them with different names!
For more detailed information, please visit the documentation.
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 easypubsub-0.4.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3f2302edd8aefd3301c1c8b9667764278b9c9774a9132cddaf313b7681dd0345 |
|
MD5 | 418fb1228e0f5a3d40ee76e9936e8d3a |
|
BLAKE2b-256 | 4d41dd2f1a46a02ba26206e5eaa2c0d518bafe35b63338099084ee9bc3a3e2ea |