我试图编写一个应用程序,允许用户启动长时间运行的计算进程,该进程将使用ØMQ从web服务器接收命令。我使用standart请求-应答体系结构:服务器有一个REQ套接字连接到worker processes REP socket。当从用户接收到新命令时,它将被发送到工作进程:
self.instance_dict[instance_id].socket.send(json_command)
result = self.instance_dict[instance_id].socket.recv()
当发送第二个命令而第一个命令仍在执行时,问题就出现了。 ØMQ提供了处理消息队列的功能还是我自己没有实现它?或者我应该改变架构吗?在
对于REQ/REP,在第一个命令被确认之前不能发送第二个命令;ZMQ强制协议中消息的正确顺序。在
您可能希望改用PUSH/PULL,然后消息将自动排队,而不需要回复(另外,我认为这也自动允许您使用多个worker进行扩展和负载平衡)。在
如果使用IOLoop,则可以设置ZMQStreams,它将在一个进程中对消息进行排队。 见https://github.com/zeromq/pyzmq/blob/master/zmq/eventloop/ioloop.py
相关问题 更多 >
编程相关推荐