Skip to main content

pyomq

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

Install

uv pip install pyomq
uv pip install 'pyomq[test]'   # adds pytest, pyzmq for the interop suite

The published wheel includes optional features: plain, curve, lz4. Use pyomq.has("curve") at runtime to check availability.

Published wheels currently target Linux. Other platforms can build from sdist when the local Rust/Python toolchain supports them. Windows pyomq support is not complete on main yet.

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
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 20 ZMTP socket types are wired:

  • Standard (RFC 28 + 47): PAIR, PUB, SUB, REQ, REP, DEALER, ROUTER, PULL, PUSH, XPUB, XSUB, STREAM.
  • 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: plain, curve, lz4.

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-tokio (multi-threaded tokio runtime). The runtime runs on a dedicated background thread; every Python call releases the GIL across the runtime trip.

Performance

See COMPARISONS.md for full tables.

pyomq vs pyzmq performance

2-process loopback throughput and latency vs pyzmq, measured on Linux 6.12 (Debian 13), Intel i7-8700B 3.2 GHz, Rust 1.95.0.

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

pyomq pyzmq ratio
PUSH/PULL msg/s 2.77 M/s 1.53 M/s 1.81×
REQ/REP rt/s 8,360/s 4,511/s 1.85×

pyomq's proxy() forwards directly between sockets on the tokio runtime, 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.8x faster. REQ/REP proxy is latency-bound (4 TCP hops per round-trip); pyomq is ~1.9x faster thanks to direct socket forwarding.

Run scripts/update_perf.py (after maturin develop --release) to re-measure, regenerate the chart, and update the proxy table.

Compression transports

OMQ.rs adds a transparent LZ4 compression transport on top of TCP: lz4+tcp://. Swap the scheme in your endpoint string and everything else stays the same:

push = ctx.socket(zmq.PUSH)
push.bind("lz4+tcp://127.0.0.1:5555")

pull = ctx.socket(zmq.PULL)
pull.connect("lz4+tcp://127.0.0.1:5555")

Both peers must use a matching compression endpoint. Payloads below ~512 B are sent as-is (the codec detects that compression would expand them).

lz4+tcp:// supports dictionary auto-training (off by default). When enabled, it samples the first 100 outbound messages, builds a 2 KiB dict, and ships it to the peer once. After that the compression threshold drops from 512 B to 128 B, so small structured messages start compressing too. Pure Rust (lz4rip), no C compiler required.

Enable it on sockets that send compressible traffic before bind()/connect():

push.compression_auto_train = 1
# or: push.setsockopt(zmq.OMQ_COMPRESSION_AUTO_TRAIN, 1)

See BENCHMARKS_COMPRESSION.md for throughput charts and benchmark details. Wire format: LZ4 transport RFC.

CURVE authentication

CURVE encrypts traffic and authenticates the server to the client. To also authenticate clients to the server, call set_curve_auth() before bind()/connect():

server_pub, server_sec = zmq.curve_keypair()
client_pub, client_sec = zmq.curve_keypair()

pull = ctx.socket(zmq.PULL)
pull.curve_server = 1
pull.curve_publickey = server_pub
pull.curve_secretkey = server_sec

# Option 1: allow specific client keys (checked in Rust, no GIL overhead)
pull.set_curve_auth([client_pub])

# Option 2: custom callback. PeerInfo has .public_key (Z85) and
# .identity (bytes or None).
pull.set_curve_auth(lambda peer: peer.public_key in allowed_keys)

# Option 3: accept any valid CURVE client (the default)
pull.set_curve_auth(None)

No ZAP, no filesystem key management. The callback runs during the CURVE handshake; returning a falsy value rejects the client.

Develop

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

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.18.2.tar.gz (561.8 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.18.2-cp311-abi3-win_arm64.whl (1.5 MB view details)

Uploaded CPython 3.11+Windows ARM64

pyomq-0.18.2-cp311-abi3-win_amd64.whl (1.7 MB view details)

Uploaded CPython 3.11+Windows x86-64

pyomq-0.18.2-cp311-abi3-musllinux_1_2_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.11+musllinux: musl 1.2+ x86-64

pyomq-0.18.2-cp311-abi3-musllinux_1_2_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.11+musllinux: musl 1.2+ ARM64

pyomq-0.18.2-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.6 MB view details)

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

pyomq-0.18.2-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.6 MB view details)

Uploaded CPython 3.11+manylinux: glibc 2.17+ ARM64

pyomq-0.18.2-cp311-abi3-macosx_11_0_arm64.whl (1.5 MB view details)

Uploaded CPython 3.11+macOS 11.0+ ARM64

pyomq-0.18.2-cp311-abi3-macosx_10_12_x86_64.whl (1.6 MB view details)

Uploaded CPython 3.11+macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: pyomq-0.18.2.tar.gz
  • Upload date:
  • Size: 561.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for pyomq-0.18.2.tar.gz
Algorithm Hash digest
SHA256 ba7c2d1937e62f8ff68c2a29eb0b3f2bf1c61082fbed9948e4fa81a05751585a
MD5 3ccb3d3120feee87eaaa3bd034079ad5
BLAKE2b-256 4ca6196773f094deeaf136bf09e97edab4e4caf1de92bd1a8181f4975a42d85e

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyomq-0.18.2.tar.gz:

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.18.2-cp311-abi3-win_arm64.whl.

File metadata

  • Download URL: pyomq-0.18.2-cp311-abi3-win_arm64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.11+, Windows ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for pyomq-0.18.2-cp311-abi3-win_arm64.whl
Algorithm Hash digest
SHA256 f22e6365adbd1e7cdbf42455b8c3ef5d5961f5eae9d5bad71ff4b19c7f7d3eaa
MD5 3f5f1f98595034b01bba29a1966d3bae
BLAKE2b-256 dc4b3922999b85631ef7c3b0733672d3d5ed4c28a85c24d02eab26637dbfa869

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyomq-0.18.2-cp311-abi3-win_arm64.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.18.2-cp311-abi3-win_amd64.whl.

File metadata

  • Download URL: pyomq-0.18.2-cp311-abi3-win_amd64.whl
  • Upload date:
  • Size: 1.7 MB
  • Tags: CPython 3.11+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for pyomq-0.18.2-cp311-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 3b84790b51cd74791f48f47f3b34730225e5178d9955cdf5ff83452b0dbdf00b
MD5 9deebdff0e7ca6abb8991af5d51e442a
BLAKE2b-256 638f3e113cce9d5699a6a1eec6f16c78c14e642df933b339ef7107043f6fc1b6

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyomq-0.18.2-cp311-abi3-win_amd64.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.18.2-cp311-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for pyomq-0.18.2-cp311-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4f93163fdb7819d9d99d7e53cd168f06de01141a19d8deb77ad38d50ab7ef024
MD5 cf70985b56dda55c9bbde40477595243
BLAKE2b-256 b8ea914abb8b23721283404f5e03274a45ec111a6c0a77db4796f896898a8547

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyomq-0.18.2-cp311-abi3-musllinux_1_2_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.18.2-cp311-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for pyomq-0.18.2-cp311-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 1fe8339b636f2fef2eb4740ab8b5bbc294e3be428b0286826880d78539be9a5b
MD5 3ef4aae4cafc1e8b93ef708c4e129248
BLAKE2b-256 af4d314f0ee7e5430273bac6ac38e1e714a458abde97a80ef15f86ed2f912402

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyomq-0.18.2-cp311-abi3-musllinux_1_2_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.

File details

Details for the file pyomq-0.18.2-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for pyomq-0.18.2-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 6a91c54a4ba747a55a7171b495a223046fe783d54071839582a197b68768d328
MD5 d828faf110cdda994c184540698b9e52
BLAKE2b-256 14155bf6d0cf743404a876f933e6d5d588f36a30039595671e886a9e46b8a5eb

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyomq-0.18.2-cp311-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.18.2-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for pyomq-0.18.2-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 8a91571df7870179af6493d1e00c294a9b2b1c2a67a22c30f1544e8151c96b3d
MD5 82e8c1275cccc7f2b1011ee222a60428
BLAKE2b-256 5d9ab73bdf3448b6e7f8e19eec1bd7e5c8ff1ff64d529936ef9552a81b0482ff

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyomq-0.18.2-cp311-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.

File details

Details for the file pyomq-0.18.2-cp311-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for pyomq-0.18.2-cp311-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b9ef16a8493205a15ec12fb60d5ac7047fa78056174e02e8463b8e64e576aeef
MD5 719dfc58f809eb9d3e528194c6ec37a1
BLAKE2b-256 8ccf2ab89b7a5acffdfaa8187f32f08f2268289a027916071c0a989f1eaf6833

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyomq-0.18.2-cp311-abi3-macosx_11_0_arm64.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.18.2-cp311-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for pyomq-0.18.2-cp311-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b86fcec57412bff31389e7e11cea5864f739ae4ce18edfe9f7974ac16b5d979b
MD5 096aebb4a5669b4b65e73efef40573ff
BLAKE2b-256 60d0c7a965d65b9052849a8e3978b32076765486d0f1eba7f4f7fee0cb9afd25

See more details on using hashes here.

Provenance

The following attestation bundles were made for pyomq-0.18.2-cp311-abi3-macosx_10_12_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.

Release history Release notifications | RSS feed

0.20.1

9 files

0.20.0

9 files

0.19.2

9 files

0.19.1

9 files

0.19.0

9 files

0.18.3

9 files

This release

0.18.2 This release

9 files

0.18.1

9 files

0.18.0

9 files

0.17.1

9 files

0.16.4

5 files

0.16.3

5 files

0.16.2

5 files

0.16.1

5 files

0.15.0

5 files

0.13.0

5 files

0.12.7

5 files

0.12.6

5 files

0.12.5

5 files

0.12.3

5 files

0.12.2

5 files

0.12.1

5 files

0.12.0

5 files

0.11.0

5 files

0.10.3

5 files

0.10.2

5 files

0.10.0

5 files

0.9.0

5 files

0.8.1

5 files

0.8.0

5 files

0.7.1

5 files

0.7.0

3 files

0.6.1

3 files

0.6.0

3 files

0.5.0

3 files

0.4.2

3 files

0.4.1

3 files

0.3.1

4 files

0.2.4

4 files

0.2.3

2 files

0.2.1

2 files

0.2.0

2 files

Supported by

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