ØMQ多线程REQ/REP

2024-05-13 13:30:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编写一个应用程序,允许用户启动长时间运行的计算进程,该进程将使用Ø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提供了处理消息队列的功能还是我自己没有实现它?或者我应该改变架构吗?在


Tags: instance用户命令self服务器webid应用程序
1条回答
网友
1楼 · 发布于 2024-05-13 13:30:47

对于REQ/REP,在第一个命令被确认之前不能发送第二个命令;ZMQ强制协议中消息的正确顺序。在

您可能希望改用PUSH/PULL,然后消息将自动排队,而不需要回复(另外,我认为这也自动允许您使用多个worker进行扩展和负载平衡)。在

如果使用IOLoop,则可以设置ZMQStreams,它将在一个进程中对消息进行排队。 见https://github.com/zeromq/pyzmq/blob/master/zmq/eventloop/ioloop.py

相关问题 更多 >