pkt*_*igg 5 python linux publish-subscribe zeromq
我试图在 debian/multiprocess 情况下使用 zeromq 和 python。我有几个进程解码来自多个传感器的原始数据,并在 zmq 中发布。到现在为止还挺好。我有一个计算过程,它订阅 zmq 上的原始数据,并执行一些计算。然后它需要发布它的答案供其他进程记录和使用。因此,我的计算过程需要在同一个过程中订阅和发布。
import zmq
import json
context = zmq.Context()
sub = context.socket(zmq.SUB)
sub.setsockopt(zmq.SUBSCRIBE, '')
sub.setsockopt(zmq.RCVBUF, 0)
sub.bind("tcp://127.0.0.1:5000")
pub = context.socket(zmq.PUB)
pub.bind("tcp://127.0.0.1:5000")
Run Code Online (Sandbox Code Playgroud)
我尝试了上述方法,但没有运气。它返回一个错误...
File "socket.pyx", line 465, in zmq.core.socket.Socket.bind (zmq/core/socket.c:4749)
zmq.core.error.ZMQError: Address already in use
Run Code Online (Sandbox Code Playgroud)
我阅读了文档、谷歌等,但现在完全卡住了。
您尝试两次绑定到同一端口(5000),这会出现错误Address already in use- 您只能将一个套接字绑定到一个端口。
但sub套接字不应该这样bind()做,它应该connect()对另一个进程正在发布到的某个主机/端口(即已经完成的操作bind())执行操作。代码应该类似于:
sub = context.socket(zmq.SUB)
sub.setsockopt(zmq.SUBSCRIBE, '')
sub.setsockopt(zmq.RCVBUF, 0)
sub.connect("tcp://127.0.0.1:XXXX")
pub = context.socket(zmq.PUB)
pub.bind("tcp://127.0.0.1:YYYY")
Run Code Online (Sandbox Code Playgroud)
我猜你并不意味着拥有端口XXXX和YYYY相同的端口,那么相同的进程会监听它本身发布的消息。
| 归档时间: |
|
| 查看次数: |
5581 次 |
| 最近记录: |