Поскольку слушатель будет вызываться в потоке получателя, вам следует выполнить передачу обслуживания потока, если вы хотите обработать сообщение в другом потоке (например, в основном потоке).
Один простой пример передачи обслуживания потокаиспользование совместно используемой переменной с блокировкой и обновление этой переменной при получении сообщения потоком получателя.И прочитайте эту переменную в другом потоке, но вам нужно использовать надлежащий механизм синхронизации, чтобы убедиться, что вы не переопределяете сообщение и не попадете в тупики.
Вот пример кода для использованиянекоторая глобальная переменная с блокировкой.
rcvd_msg = None
lock = thread.Condition()
# executed in the main thread
with lock:
while rcvd_msg == None:
lock.wait()
# read rcvd_msg
rcvd_msg = None
lock.notifyAll()
class Listener(ConnectionListener):
def on_message(self, headers, message):
# executed in the receiver thread
global rcvd_msg, lock
with lock:
while rcvd_msg != None:
lock.wait()
rcvd_msg = message
lock.notifyAll()
Надеюсь, это поможет !!