zmq_getsockopt错误:zmq.error.ZMQError:ipc路径没有这样的文件或目录

2024-04-27 10:50:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我是新使用ZeroMQ的,所以我正在努力编写一些代码

如果执行以下代码,则不会显示错误:

import zmq.asyncio
ctx = zmq.asyncio.Context()
rcv_socket = ctx.socket(zmq.PULL)

rcv_socket.connect("ipc:///tmp/test")

rcv_socket.bind("ipc:///tmp/test")

但是,如果我尝试使用函数zmq_getsockopt(),它会失败:

import zmq.asyncio

ctx = zmq.asyncio.Context()
rcv_socket = ctx.socket(zmq.PULL)

rcv_socket.connect("ipc:///tmp/test")

socket_path = rcv_socket.getsockopt(zmq.LAST_ENDPOINT)

rcv_socket.bind("ipc://%s" % socket_path)

然后我得到:

zmq.error.ZMQError: No such file or directory for ipc path "b'ipc:///tmp/test'".


Tags: path代码testimportasynciobindconnectcontext
1条回答
网友
1楼 · 发布于 2024-04-27 10:50:33

"...new to use ZeroMQ, so I am struggling with some code."

首先,欢迎来到Zero的禅宗艺术


如果您从未使用过ZeroMQ,
在深入了解更多细节之前,您可以先看看"ZeroMQ Principles in less than Five Seconds"


好吧,如果你首先理解游戏规则,而不是从崩溃中学习,你会过得更好(是的,与“想要成为福音传道者的大师”向人群灌输的“仅仅编码”就足够了——这对于做一件严肃的事来说是不够的)

这就是为什么:

如果您阅读了已发布的API,如果您对系统的结构没有任何了解,那么大多数时候您仍然会感到困惑;不了解其内部和外部行为(框架的游戏规则):

The ZMQ_LAST_ENDPOINT option shall retrieve the last endpoint bound for TCP and IPC transports. The returned value will be a string in the form of a ZMQ DSN. Note that if the TCP host is INADDR_ANY, indicated by a *, then the returned address will be 0.0.0.0 (for IPv4).

这说明了这一点,但在不了解概念的情况下,这一点仍然隐藏在你的视线之外


最好的下一步

如果你真的很认真地想读{a3},那么在阅读了上面的链接之后,下一步最好的办法就是停止编码,先花点时间阅读和理解Pieter HINTJENS的书《代码连接,第一卷》这本书确实是你进一步阅读的必读之作——绝对值得你花所有的时间&;努力

然后,您将看到为什么这永远不会飞:

import zmq.asyncio; ctx = zmq.asyncio.Context()
rcv_socket        = ctx.socket( zmq.PULL )
rcv_socket.connect( "ipc:///tmp/test" )

socket_path = rcv_socket.getsockopt( zmq.LAST_ENDPOINT )

rcv_socket.bind(    "ipc://%s" % socket_path )

然而,这可能(但此处仍然没有处理以NULL结尾的字符string),这本身就是一种不良软件设计实践和/或自律的标志,或两者兼而有之):

import zmq.asyncio; ctx = zmq.asyncio.Context()
rcv_socket        = ctx.socket( zmq.PULL )    
rcv_socket.bind(    "ipc:///tmp/test" )

socket_path = rcv_socket.getsockopt( zmq.LAST_ENDPOINT )

rcv_socket.connect( "ipc://%s" % socket_path )

相关问题 更多 >