Как мне поддерживать прослушивание UDP-сервера в Python 3 без блокировки цикла WHILE? - PullRequest
2 голосов
/ 01 ноября 2019

Каждый пример сервера UDP, который я могу найти, использует цикл while True для прослушивания входящих данных. Я пытаюсь использовать один сервер сокетов UDP как часть окна KIVY, что также делает другие вещи. Как только я реализую серверный цикл True, все блокируется, как я полагаю, я ожидаю, что он это сделает.

Как мне прослушивать порт UDP, а также продолжить работу остальной части программы?

Я попытался переместить обработку сервера UDP в другой файл (udp_server.py) и затем импортировать функцию, но, поскольку я импортирую цикл while, ничего не меняется.

У меня также естьпопытался присвоить полученные данные переменной внутри udp_server.py, а затем просто импортировать эту переменную, при этом udp_server.py уже работает отдельно, но даже это блокирует мою основную программу.

Я на 99,99% уверен, что этопросто кое-что, что я должен уже знать, но я новичок в Python. Заранее спасибо за любую помощь.

1 Ответ

0 голосов
/ 01 ноября 2019

Спасибо, Крис !!!!!!

Я уверен, что недооцениваю сложность многопоточности, но теперь она прекрасно работает, и единственное, что мне нужно было добавить, было:

def thread_function():
    from udp_server import amx_rx
    # do stuff with amx_rx...

# class TouchPanel stuff...

if __name__ == '__main__':
    x = threading.Thread(target=thread_function, daemon=True)
    x.start()
    try:
        TouchPanel().run()
    except KeyboardInterrupt:
        raise

Теперь у меня есть работающая программа с UDP-сокетом, слушающим в фоновом режиме! Спасибо !!!

...