Skip to content

feat: add optional pyomq backend for ZMQ connectors - #281

Merged
toby-coleman merged 6 commits into
plugboard-dev:mainfrom
paddor:pyomq-zmq-backend
Sep 9, 2026
Merged

feat: add optional pyomq backend for ZMQ connectors#281
toby-coleman merged 6 commits into
plugboard-dev:mainfrom
paddor:pyomq-zmq-backend

Conversation

@paddor

@paddor paddor commented Sep 1, 2026

Copy link
Copy Markdown
Contributor
  • Add PLUGBOARD_ZMQ_BACKEND backend selector for ZMQ imports.
  • Keep existing PyZMQ behavior as default when env var is unset or empty.
  • Support PLUGBOARD_ZMQ_BACKEND=pyomq for ZMQChannel and ZMQProxy.
  • Add plugboard[omq] optional extra with pyomq>=0.20.1,<1.
  • Add backend selection tests plus pyomq socket/proxy smoke coverage.
  • Use bounded proxy polling and short pyomq close drain window so pubsub close sentinel is delivered reliably.

Benchmarks:

  • Benchmarked Plugboard ZMQChannel over TCP loopback with 2 Python processes, multipart [topic, payload], pickle/unpickle included, best of 5 runs.
  • 128 B payload: PyZMQ 33.0k msg/s, pyomq 145.0k msg/s, about 4.4x faster.
  • 1 KiB payload: PyZMQ 32.4k msg/s, pyomq 147.1k msg/s, about 4.5x faster.
  • 8 KiB payload: PyZMQ 30.0k msg/s, pyomq 128.2k msg/s, about 4.3x faster.

Add a small backend selector for ZMQ imports so existing PyZMQ behavior remains default while PLUGBOARD_ZMQ_BACKEND=pyomq can use pyomq.

Wire the ZMQ channel and proxy through the selector, add the optional plugboard[omq] extra, and cover backend selection plus pyomq socket/proxy smoke paths.
@paddor paddor changed the title Add optional pyomq backend for ZMQ connectors feat: add optional pyomq backend for ZMQ connectors Sep 1, 2026
@codecov

codecov Bot commented Sep 6, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@paddor

paddor commented Sep 7, 2026

Copy link
Copy Markdown
Contributor Author

In case pyomq is missing anything, let me know. There's also a known issue around send_multipart()/recv_multipart(): paddor/omq.rs#339

# Conflicts:
#	pyproject.toml
#	uv.lock
@toby-coleman

Copy link
Copy Markdown
Contributor

Hi @paddor - thanks for contributing this. Looks good to me so will get it merged in shortly.

@toby-coleman
toby-coleman merged commit 2c6b1c2 into plugboard-dev:main Sep 9, 2026
13 of 19 checks passed
@paddor

paddor commented Sep 9, 2026

Copy link
Copy Markdown
Contributor Author

Sick! Glad to see

@paddor
paddor deleted the pyomq-zmq-backend branch September 9, 2026 19:15
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants