2011-09-22 61 views
1

我正在嘗試編寫一個應用程序,允許用戶啓動長期運行的計算過程,該過程將使用ØMQ從Web服務器接收命令。我使用standart request-reply體系結構:服務器有一個連接到工作進程REP套接字的REQ套接字。當從用戶接收到新的命令時,它被髮送到工作進程:ØMQ多線程REQ/REP

self.instance_dict[instance_id].socket.send(json_command) 
result = self.instance_dict[instance_id].socket.recv() 

問題出現時,同時仍然在執行第一個被髮送的第二命令。 ØMQ是否提供可以處理消息隊列的功能,還是我自己沒有實現?或者我應該改變架構?

回答

3

對於REQ/REP,第二個命令不能發送,直到第一個命令被確認; ZMQ在協議中強制執行正確的消息排序。

您可能想使用PUSH/PULL - 這些消息會自動排隊,無需在兩者之間進行回覆(我認爲這也會自動允許您使用多個工作人員進行縮放和負載平衡)。

如果您使用IOLoop,您可以設置ZMQStreams來排隊進程中的消息。 見https://github.com/zeromq/pyzmq/blob/master/zmq/eventloop/ioloop.py