ZeroMq PUSH / PULL确保PUSH队列为空

问题描述 投票:-1回答:1

我有一个包含2个模块的体系结构(一个在C ++中,一个在Python中),该模块通过ZeroMQ与PUSH / PULL套接字进行通信。PUSHER是C ++模块,而PULLER是Python模块。第三个模块在REQ / REP中与这两个模块进行通信,以请求特定命令(例如,开始,停止,终止...)。

我的Python模块可以以3种不同的模式启动,并且可以通过REQ / REP请求在它们之间进行切换。在模式之间进行切换时,两个C ++ en python模块都将停止(进入IDLE STATE),然后再次启动。 C ++只有一种模式,但是进入IDLE_STATE,因为否则它什么都不会起作用,并继续填补发送队列中的任何内容。

但是问题是python模块首先收到停止请求,然后才收到C ++模块。因此,C ++模块有时间在停止之前继续填充其队列。因此,当以另一种模式再次启动时,python模块将首先从先前的模式中获取消息,然后再从实际模式中获取消息。

所以,有一种方法可以避免这种行为?我当时正在考虑在python模块中创建一个“ clearQueue”函数,以便它在启动C ++模块之前接收剩余的消息(并将它们扔进垃圾箱)。

zeromq pyzmq
1个回答
0
投票

我做了更多的研究,试图找到一个解决方案,但是似乎没有简单的解决方案。可以将“高水位标记”(即“ qeue”大小)设置为特定值,因此我曾考虑将其设置为1,但最终仍然会在队列中保留一条消息。没有人帮忙吗?

编辑:我实际上在python端添加了以下内容,直到我发现退出全功能。但无法获得其他解决方案。

try:
    while True:
        self.bus.receiveData(zmq.NOBLOCK)
except:
    pass
© www.soinside.com 2019 - 2024. All rights reserved.