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
File details
Details for the file easypubsub-0.4.3.tar.gz
.
File metadata
- Download URL: easypubsub-0.4.3.tar.gz
- Upload date:
- Size: 9.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f9928654d518403427a04cbc83a5a4d8f71f1f812a12b04d042d9214b8a8009d |
|
MD5 | f7b110675468404bd8b21e9f766b71a7 |
|
BLAKE2b-256 | df5f0a6c457aae17163d7448528600725d5b87dc10de4f6b875fd69fcb2af813 |
File details
Details for the file easypubsub-0.4.3-py3-none-any.whl
.
File metadata
- Download URL: easypubsub-0.4.3-py3-none-any.whl
- Upload date:
- Size: 8.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.2 CPython/3.9.16
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 870832620da711ea27f90410cd3fe4b5e88340161e6842f50cfd7bfebab6151e |
|
MD5 | 879fe7d51ff6fe7557fd3dd175344769 |
|
BLAKE2b-256 | 3f779ece155ccf87a60ad166695282e60d176c6fe3bdcbb8065cfaea064a16e6 |