У меня есть архитектура с 2 модулями (один на C ++ и один на Python), который обменивается данными через ZeroMQ с разъемами PUSH / PULL. PUSHER - это модуль C ++, а PULLER - это модуль Python. Третий модуль связывается в REQ / REP с этими двумя модулями, чтобы запросить указанную команду c (например, start, stop, kill, ...).
Мой Python модуль Cand может быть запущен в 3 разных режимы и могут переключаться между ними по запросу через REQ / REP. При переключении между режимами оба модуля C ++ en python останавливаются (переход в состояние IDLE STATE), а затем запускаются снова. C ++ имеет только один режим, но он переходит в IDLE_STATE, потому что в противном случае он работает даром и продолжает заполнять свою очередь отправки даром.
Но проблема в том, что модуль python сначала получает запрос на остановку, а затем C ++ модуль. Итак, модуль C ++ успевает продолжить заполнение своей очереди перед остановкой. Таким образом, при повторном запуске в другом режиме модуль python сначала получает сообщения из предыдущего режима, а затем получает сообщения из реального режима.
Итак, есть ли способ избежать такого поведения? Я думал о создании функции clearQueue в модуле python, чтобы он получал оставшиеся сообщения (и перебрасывал их в tra sh) перед запуском модуля C ++.