Skip to main content

A simple wrapper around PyZMQ that provides an easy interface to Publish Subscribe.

Project description

🗞️ EasyPubSub

Documentation Status PyPI License: MIT Code style: black Tests Codacy Code Quality Codacy Coverage

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

easypubsub-0.4.3.tar.gz (9.1 kB view details)

Uploaded Source

Built Distribution

easypubsub-0.4.3-py3-none-any.whl (8.5 kB view details)

Uploaded Python 3

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

Hashes for easypubsub-0.4.3.tar.gz
Algorithm Hash digest
SHA256 f9928654d518403427a04cbc83a5a4d8f71f1f812a12b04d042d9214b8a8009d
MD5 f7b110675468404bd8b21e9f766b71a7
BLAKE2b-256 df5f0a6c457aae17163d7448528600725d5b87dc10de4f6b875fd69fcb2af813

See more details on using hashes here.

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

Hashes for easypubsub-0.4.3-py3-none-any.whl
Algorithm Hash digest
SHA256 870832620da711ea27f90410cd3fe4b5e88340161e6842f50cfd7bfebab6151e
MD5 879fe7d51ff6fe7557fd3dd175344769
BLAKE2b-256 3f779ece155ccf87a60ad166695282e60d176c6fe3bdcbb8065cfaea064a16e6

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page