我有一个服务器进程,它接收来自网络客户端的请求。 服务器必须调用一个外部工作进程(另一个 .py ),该进程将数据流式传输到服务器,然后服务器将数据流式传输回客户端。
服务器必须监视这些工作进程并向它们发送消息(基本上是杀死它们或发送消息以控制流式传输哪种数据)。这些消息是异步的(例如,取决于网络客户端)
我想在 ipc://
-transport-class 上使用 ZeroMQ 套接字,但是对 socket.recv()
方法的调用是阻塞的。
我应该使用两个套接字(一个用于将数据流式传输到服务器,另一个用于从服务器接收控制消息)吗?
最佳答案
使用单独的套接字进行信号和消息传递总是更好
虽然 Poller
实例会有所帮助,但主要步骤是使用单独的套接字发送信号,另一个套接字用于数据流。总是。关键是,在这样的设置中,Poller.poll()
和事件循环都可以保持特定于套接字,并且在实时控制期间花费不超过预定义的时间量代码执行。
因此,请毫不犹豫地设置一个更丰富的信令/消息传递基础设施作为一个环境,在这个环境中,您只会享受到更简单的控制、关注点的分离和意图的清晰度。
ZeroMQ 是执行此操作的出色工具 - 包括每个套接字 IO 线程亲和性,因此确实可以触手可及的细粒度性能调整。
关于python - ZeroMQ 与子进程的双向异步通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46139185/