A simple message-oriented middleware library built for Python IPC across machine boundaries
Project description
PyMQ
PyMQ is a simple message-oriented middleware library for implementing Python IPC across machine boundaries. The API enables different styles of remoting via Pub/Sub, Queues, and synchronous RPC.
With PyMQ, developers can integrate Python applications running on different machines in a loosely coupled way over existing transport mechanisms. PyMQ currently provides a Redis backend.
Using PyMQ
Initialize PyMQ
The core module manages a global eventbus instance that provides the remoting primitives. The default Redis
implementation uses an event loop over a pubsub object. The global eventbus is initialized via pymq.init
and by
passing a provider factory.
import pymq
from pymq.provider.redis import RedisConfig
# starts a new thread with a Redis event loop
pymq.init(RedisConfig())
# main application control loop
pymq.shutdown()
This will create an eventbus instance on top of a local Redis server.
Pub/Sub
Pub/Sub allows asynchronous event-based communication. Event classes are used to transport state and identify channels.
import pymq
# common code
class MyEvent:
pass
# subscribe code
@pymq.listener
def on_event(event: MyEvent):
print('event received')
# publisher code
pymq.publish(MyEvent())
Queues
Queues are straight forward, as they are compatible to the Python queue.Queue
specification.
import pymq
queue = pymq.queue('my_queue')
queue.put('obj')
print(queue.get()) # outputs 'obj'
RPC
Server code (suppose this is the module)
import pymq
@pymq.remote('product_remote')
def product(a: int, b: int) -> int: # eventbus relies on type hints for marshalling
return a * b
Client code
import pymq
result: 'List[eventbus.RpcResponse]' = pymq.rpc('product_remote', 2, 4)
print(result[0].result) # 8
With a shared code-base methods can also be exposed and called by passing the callable. For example,
import pymq
# common code
class Remote:
def remote_fn(self) -> None:
pass
# server
obj = Remote()
pymq.expose(obj.remote_fn)
# client
pymq.rpc(Remote.remote_fn)
Known Limitations
Quite a few. TODO: document ;-)
Background
Originally part of the Symmetry project, was extracted as a standalone library.
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 pymq-0.1.0.dev1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | b526fc907ae1124bbec25fd59f89da2bf9cf6fd9a5163de7a2a14d5fbb5df597 |
|
MD5 | 4ebb906f314762e75ec634c3f7c6c338 |
|
BLAKE2b-256 | 0724f0cdf916a59f500633d7f79adac6dfd2e18b3a721c32c897cd31e21bc019 |