作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用 ZeroMQ Poller()
python中有两个套接字的功能:
import zmq
# Prepare our context and sockets
context = zmq.Context()
receiver = context.socket(zmq.DEALER)
receiver.connect("ipc:///tmp/interface-transducer")
subscriber = context.socket(zmq.SUB)
subscriber.bind("ipc:///tmp/fast-service")
subscriber.setsockopt(zmq.SUBSCRIBE, b"10001")
# Initialize poll set
poller = zmq.Poller()
poller.register(receiver, zmq.POLLIN)
poller.register(subscriber, zmq.POLLIN)
# Process messages from both sockets
while True:
try:
socks = dict(poller.poll())
except KeyboardInterrupt:
break
if receiver in socks:
message = receiver.recv()
print("RECEIVER OK\n")
if subscriber in socks:
message = subscriber.recv()
print("SUBSCRIBER OK\n")
然后是将消息作为
ROUTER
发送的服务器被描述为:
def main():
context = zmq.Context()
router = context.socket(zmq.ROUTER)
router.bind("ipc:///tmp/interface-transducer")
while True:
identity = b'electrode-service'
b_identity = identity
router.send_multipart([b_identity, b'[1,2]'])
print("Sent")
time.sleep(1)
if __name__ == "__main__":
main()
但是当我运行这两个进程时,它没有按预期工作,轮询脚本不打印任何内容。这种实现可能有什么问题?
最佳答案
Q : "What could be the problem of such implementation?"
.poll()
的阻塞形式,这种实现很容易出现死锁和失败。 & .recv()
方法.recv()
在这种情况下,.send_multipart()
是惊人的警告,将需要多部分消息处理ipc://
传输类容易隐藏与 O/S 相关的用户级代码限制(由操作系统放置在路径名的格式和长度上,以及对 R/W/X 的有效用户权限)ipc://
运输类 .connect()
-method 的使用取决于 O/S 服务尚未创建目标地址的情况(需要先成功 .bind()
).bind()
到同一个 ipc://
运输级目标将无声无息地摧毁你的意图 ROUTER
- 访问消息/信令平面基础设施,您的实现花费零努力来自我保护和自我诊断可能默默出现在“幕后”的错误Shouldn't zeromq deal automatically with deadlocks? I tried using the example given in the zeromq guide mspoller If I can't use .poll() and recv() simultaneously, how should I use ZMQ Poller structure? – hao123
.poll()
- &
.recv()
-methods,但完成它以适应非阻塞方式 -
.poll( 0 )
& 添加主动检测 + 多部分消息的处理(同样,最好以非阻塞方式,在适当的情况下使用
zmq.NOBLOCK
选项标志)。自阻塞使代码失控。
关于python - 为什么 ZeroMQ 轮询器没有收到消息(python)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64608767/
我是一名优秀的程序员,十分优秀!