zeromq / pyzmq

PyZMQ: Python bindings for zeromq
http://zguide.zeromq.org/py:all
BSD 3-Clause "New" or "Revised" License
3.62k stars 635 forks source link

BUG: IPC Support on Windows broken in 25.1.2 #1959

Closed MrMoose closed 4 months ago

MrMoose commented 4 months ago

This is a pyzmq bug

What pyzmq version?

25.1.2

What libzmq version?

libzmq-v141-mt-4_3_4-0a6f51ca.dll

Python version (and how it was installed)

Python 3.10

OS

Windows (10 and 11)

What happened?

Opening an IPC socket on Windows will yield: ZMQError Protocol not supported. This used to work with 23.0.0

Code to reproduce bug

#!/usr/bin/env python3

import zmq

if __name__ == "__main__":
    ctx = zmq.Context.instance()
    socket = ctx.socket(zmq.PAIR)
    socket.linger = 0
    socket.connect("ipc://ecm_data_sm.ipc")

Traceback, if applicable

n/a

More info

According to my guesswork this is because apparently the libzmq DLL used in the wheel got downgraded in the used ABI version. In 23.x there was: libzmq-v142-mt-4_3_4-4e355e3e.dll. Now in 25.x the used DLL is: libzmq-v141-mt-4_3_4-0a6f51ca.dll. My guess is that the ABI 141 does not support IPC as mentioned in this (closed) bug report: https://github.com/zeromq/pyzmq/issues/1462#issuecomment-831884567

So this would be a bit of a regression and should perhaps be unit tested.

minrk commented 4 months ago

Yes, this is an unfortunate but deliberate documented change where the IPC support in libzmq caused unavoidable crashes for a number of users on Windows. So it was removed, because having a nice feature for some users seemed less important than having a working-at-all version for most users.

But you're in luck! pyzmq 26 has optimistically re-enabled IPC because there's been a libzmq release. If you could test the prerelease with pip install --pre pyzmq, that would be fantastic. I am especially hopeful that the new build setup in v26 fixes issues on Windows (also fearful that it introduces new ones, hence the prerelease).

It is also unit tested, so it won't be removed by accident. I can't promise that it won't be removed if it turns out to still cause crashes, though.

MrMoose commented 4 months ago

Ah, okay. I did not realize this was a deliberate change. That explains it. I just tested the reproducer with the prerelease and it works. However, I will have to test the whole application with it, so this will take a while longer. I will comment here if it works.

Since I won't be able to use a prerelease in production, do you have some timeframe on when this is going to be the official release?

minrk commented 4 months ago

Not concrete, but hopefully soon. I'm trying to track down some cross-compilation issues, but the more 'works for me' reports I get from Windows folks, the better I'll feel.

MrMoose commented 4 months ago

Okay, I did a few tests with the current prerelease and, as expected, the issue with the unsupported protocol goes away. I did not notice any problems on my end. Seems to work fine. I guess we can close the file on that one. Agreed?

MrMoose commented 4 months ago

I'm closing this as it will already be fixed with the 26.x release once it is out. Thanks for your responses!

minrk commented 4 months ago

Thanks for testing and reporting back! I've got several things pressing me right now, but I do want to get this released soon.