将绑定的ZMQ套接字移动到另一个进程

时间:2016-07-13 09:52:58

标签: python sockets zeromq

我有一个Python程序,它产生了几个其他Python程序作为子进程。其中一个子进程应该打开并绑定一个ZMQ发布者套接字,这样其他子进程就可以订阅它。

我无法保证哪些tcp端口可用,因此当我绑定到子进程中的随机端口时,我的主程序将不知道该告诉其他子进程的内容。

有没有办法在主进程中绑定套接字然后以某种方式将套接字传递给我的子进程?或者以其他方式预先注册套接字或将端口信息从子进程传递回主进程的标准方法(stdout和stderr已被其他数据使用)?

只检查主进程中的空闲端口并将其传递给子进程并不是最佳选择,因为如果在此期间分配了套接字,这仍然可能会失败。此外,由于我的程序应该在Unix和Windows上运行,我不能真正使用ipc套接字,否则会解决我的问题。

1 个答案:

答案 0 :(得分:1)

最简单的方法是为池端口管理器创建逻辑(而不是尝试共享/传递ZeroMQ套接字到/在其他进程中) < / H2>

可以创建一个持久的,先验已知的 tcp://A.B.C.D:8765 - 传输类 .bind() 访问点,向所有人展示客户端进程作为端口分配服务,客户端处理 .connect() ,以任何方式进行握手以证明身份/凭证/目的/等,并且 {{1} } 以协调的方式实现一个实际上免费的消息/信令服务端口号,在系统范围内保证不会在此时使用/直到返回到端口管理器(端口的旋转池是集中的)在您的代码控制下管理,而在分布式进程/线程.recv()本地创建的所有套接字 - 池管理器都宣布端口#,因此仍将保留,并且应始终保持在.connect() / .bind()建议范围内,不得单独分享。