Skip to main content

Python binding for omq.rs (Rust libzmq port). Drop-in pyzmq replacement on the common path.

Project description

pyomq

Python binding for omq.rs, a Rust libzmq port. Drop-in pyzmq replacement on the common path.

Install

uv pip install pyomq
# Optional extras (built into the wheel via cargo features):
uv pip install 'pyomq[curve]'
uv pip install 'pyomq[blake3zmq,lz4,zstd]'
uv pip install 'pyomq[test]'   # adds pytest, pyzmq for the interop suite

Usage

import pyomq as zmq  # drop-in for `import zmq` from pyzmq

ctx = zmq.Context()
push = ctx.socket(zmq.PUSH)
push.connect("tcp://127.0.0.1:5555")
push.send(b"hello")
push.close()
ctx.term()

For asynchronous code:

import pyomq.asyncio as zmq_async

ctx = zmq_async.Context()
sock = ctx.socket(pyomq.PUSH)
await sock.connect("tcp://127.0.0.1:5555")
await sock.send(b"hello")
await sock.close()

Status

Sync and asyncio APIs both ship in this release. All 19 ZMTP socket types are wired:

  • Standard (RFC 28 + 47): PAIR, PUB, SUB, REQ, REP, DEALER, ROUTER, PULL, PUSH, XPUB, XSUB.
  • Draft: SERVER, CLIENT (RFC 41), RADIO, DISH (RFC 48), GATHER, SCATTER (RFC 49), PEER, CHANNEL (RFC 51).

Transports: tcp://, ipc://, inproc://, and udp:// (RADIO/DISH only). Optional features built into the wheel: curve, blake3zmq, lz4, zstd.

DISH groups: use socket.join(b"group") / socket.leave(b"group") to manage subscriptions; messages are sent as multipart [group, body].

Backend

pyomq is built on omq-compio (single-threaded io_uring on Linux). The runtime runs on a dedicated background thread; every Python call releases the GIL across the runtime trip. This is the only backend pyomq supports — the omq-tokio backend exists in the upstream Rust workspace for callers that need a multi-thread tokio integration, but pyomq's per-call overhead is shaped around compio's single-thread invariant.

Performance

Loopback PUSH/PULL throughput vs pyzmq, on a Linux 6.12 (Debian 13) VM on an Intel Mac Mini 2018 (i7-8700B, 3.2 GHz), Rust 1.95.0, default features:

Size inproc pyomq inproc pyzmq ratio tcp pyomq tcp pyzmq ratio
8 B 1.30 M/s 627 k/s 2.08× 1.36 M/s 565 k/s 2.41×
32 B 1.29 M/s 620 k/s 2.08× 1.36 M/s 576 k/s 2.37×
128 B 1.31 M/s 516 k/s 2.54× 1.29 M/s 496 k/s 2.61×
512 B 1.29 M/s 480 k/s 2.69× 1.21 M/s 461 k/s 2.62×
2 KiB 1.17 M/s 461 k/s 2.54× 908 k/s 342 k/s 2.65×
8 KiB 1.04 M/s 368 k/s 2.83× 349 k/s 102 k/s 3.41×
32 KiB 622 k/s 196 k/s 3.17× 116 k/s 46 k/s 2.50×
128 KiB 203 k/s 70 k/s 2.91× 32 k/s 24 k/s 1.32×

zmq.proxy() forwarding (128 B, TCP)

pyomq pyzmq ratio
PUSH/PULL msg/s 963 k/s 520 k/s 1.85×
REQ/REP rt/s 8,764/s 6,521/s 1.34×

pyomq's proxy() runs as a native Rust async loop on the compio thread — no Python per-message overhead. pyzmq's zmq.proxy() calls libzmq's C-level zmq_proxy. PUSH/PULL forwarding is throughput-bound and pyomq is ~1.9× faster. REQ/REP is latency-bound (4 TCP hops per round-trip) so both are similar.

Run scripts/update_perf.py (after maturin develop --release) to re-measure and update the tables above.

Develop

cd bindings/pyomq
uv venv && source .venv/bin/activate
uv pip install maturin pytest pyzmq
maturin develop --release
pytest -v

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

pyomq-0.2.4.tar.gz (295.9 kB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pyomq-0.2.4-cp39-abi3-manylinux_2_34_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.34+ x86-64

pyomq-0.2.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.1 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ x86-64

pyomq-0.2.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.1 MB view details)

Uploaded CPython 3.9+manylinux: glibc 2.17+ ARM64

File details

Details for the file pyomq-0.2.4.tar.gz.

File metadata

  • Download URL: pyomq-0.2.4.tar.gz
  • Upload date:
  • Size: 295.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: maturin/1.13.1

File hashes

Hashes for pyomq-0.2.4.tar.gz
Algorithm Hash digest
SHA256 8a747a45b8ba464eb957d9aa53380d401ef7e33a0b83e84c7088ec58c72e63af
MD5 60770573c856b48b10deaf8e21a7ace7
BLAKE2b-256 47e1db792121a8262288df11019a4bd6ed67df66f2ccfdbfd2319fbb9530ce16

See more details on using hashes here.

File details

Details for the file pyomq-0.2.4-cp39-abi3-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for pyomq-0.2.4-cp39-abi3-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 94eaf9bd32979e0ca8aeeb53a5868679f6f3090806ef7e2669809e7f0835911c
MD5 273560d69e8354ef6185a39a21079321
BLAKE2b-256 0b6a09ca77aa2fb2c21e4cc3fa41c2c27a95e053b108c1c5fe7039fb35021b77

See more details on using hashes here.

File details

Details for the file pyomq-0.2.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyomq-0.2.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a21ecdd57da39000b29170e180eb3175338657aa11e34df4800615b8f48c166d
MD5 ac9928b4b7eb8464fffda4b481991238
BLAKE2b-256 be6d97fdd6ce3c919380da0faf41c157fdf03cfc2142adafd60b5ee0e5aeb303

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyomq-0.2.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release-pyomq.yml on paddor/omq.rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file pyomq-0.2.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyomq-0.2.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 99e0b4fd6f060d6bd55b3c4b17aa9a97a0db26e0294750fa660d0047d2d59ac3
MD5 cb158695288aed634fcb5a9078e76ab5
BLAKE2b-256 80045f7811d9ccb5d98026a14a34fe02e498302034f1b1e958fe8c270eb6bd57

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyomq-0.2.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl:

Publisher: release-pyomq.yml on paddor/omq.rs

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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