python - ZeroMQ 与子进程的双向异步通信

标签 python sockets ipc zeromq

我有一个服务器进程,它接收来自网络客户端的请求。 服务器必须调用一个外部工作进程(另一个 .py ),该进程将数据流式传输到服务器,然后服务器将数据流式传输回客户端。

服务器必须监视这些工作进程并向它们发送消息(基本上是杀死它们或发送消息以控制流式传输哪种数据)。这些消息是异步的(例如,取决于网络客户端)

我想在 ipc://-transport-class 上使用 ZeroMQ 套接字,但是对 socket.recv() 方法的调用是阻塞的。

我应该使用两个套接字(一个用于将数据流式传输到服务器,另一个用于从服务器接收控制消息)吗?

最佳答案

使用单独的套接字进行信号和消息传递总是更好

虽然 Poller 实例会有所帮助,但主要步骤是使用单独的套接字发送信号,另一个套接字用于数据流。总是。关键是,在这样的设置中,Poller.poll() 和事件循环都可以保持特定于套接字,并且在实时控制期间花费不超过预定义的时间量代码执行。

因此,请毫不犹豫地设置一个更丰富的信令/消息传递基础设施作为一个环境,在这个环境中,您只会享受到更简单的控制、关注点的分离和意图的清晰度。

ZeroMQ 是执行此操作的出色工具 - 包括每个套接字 IO 线程亲和性,因此确实可以触手可及的细粒度性能调整。

关于python - ZeroMQ 与子进程的双向异步通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46139185/

相关文章:

java - 如何使用 ip 地址和端口号连接到服务器套接字? (客户端与服务器在不同的机器上运行)

android - 如何通过 Intent 发送任意字符串?

c - 如何将结构中的多个 void 指针取消引用到 1 block 内存中?

c - 如何在 unix 中调用 raise 时共享/传递参数?

python - Flask-Babel 的 Flask 测试设置

python - 逐行读取子进程标准输出

python - 根据条件连接列表中的字符串和整数

python - 将 numpy 数组中的特定值转换为 NAN

java - 如何让此代码等待线程池中的线程可用?

c++ - setsockopt 在多播成员资格上将错误号设置为 ENOPROTOOPT