【发布时间】:2020-02-21 15:00:06
【问题描述】:
我有一个包含 2 个模块(一个在 C++ 中,一个在 Python 中)的架构,它们通过 ZeroMQ 与 PUSH/PULL 套接字进行通信。PUSHER 是 C++ 模块,而 PULLER 是 Python 模块。第三个模块在 REQ/REP 中与这两个模块通信以请求特定命令(例如启动、停止、终止……)。
我的 Python 模块可以在 3 种不同的模式下启动,并且可以在通过 REQ/REP 请求时在它们之间切换。在模式之间切换时,两个 C++ 和 python 模块都会停止(进入空闲状态),然后再次启动。 C++ 只有一种模式,但它会进入 IDLE_STATE,因为否则它会一无所获并继续填充其发送队列。
但问题是python模块首先收到停止请求,然后是C++模块。因此,C++ 模块在停止之前有时间继续填充其队列。因此,当以另一种模式再次启动时,python 模块会先从前一种模式获取消息,然后再从实际模式获取消息。
那么,有没有办法避免这种行为?我正在考虑在 python 模块中创建一个“clearQueue”函数,以便它在启动 C++ 模块之前接收剩余的消息(并将它们扔到垃圾箱)。
【问题讨论】: