Python3 input() прерывается при получении входящего сообщения
То, что я хочу сделать, - это дождаться ввода пользователем команд на сервер. Однако, поскольку input() является блокирующим оператором, я хочу выйти из этого оператора, если будет получено входящее сообщение с сервера.
В настоящее время у меня есть две темы.
Резьба 1:
def user_input(): global terminate global cmd while True: time.sleep(10) tLock.acquire() uInput = input("Enter: ") if(uInput == "1"): terminate = 1 break if uInput == "2": mySock.mysend(cmd.getShutdown()) if uInput == "3": mySock.mysend(cmd.getStartUp()) if uInput == "4": mySock.mysend(cmd.getReset()) tLock.release()
Резьба 2:
tLock.acquire() mySock = MySocket() mySock.connect() tLock.release() s1 = threading.Thread(target=user_input) s1.start() while(1): if mySock.dataCheck(): tLock.acquire() incoming = mySock.myreceive() if len(incoming) > 0: print("Incoming: ", incoming) tLock.release() out = cmd.parse(incoming) if len(out) > 0: tLock.acquire() mySock.mysend(out) tLock.release() if(terminate): break
Что я уже пробовал:
Я знаю, что могу сгенерировать сигнал с помощью функции signal (), чтобы создать тайм-аут для ввода, но я хотел бы сгенерировать сигнал, когда
if mySock.dataCheck():
споткнулся. Эта функция проверяет, есть ли какие-либо входящие данные. В этот момент я хочу выйти из оператора input (), а затем заблокировать входной поток. Я хочу избавиться от 10-секундной задержки, которую я использую для ожидания любых входящих сообщений.
Какое-нибудь озарение?