У меня есть два потока:
printlock = threading.Lock()
# Main thread:
while True:
if not(printlock.locked()):
stdin_input = raw_input()
do_something(stdin_input)
# Listening thread:
while True:
socket_input = listen_to_socket()
with printlock:
print socket_input
Теперь поведение таково, что когда прослушивающий поток получает ввод, он печатает материал, который перезаписывает raw_input ().Содержимое raw_input все еще там, но оно скрыто за другим выводом.Чего я хотел бы достичь, так это того, что когда прослушивающий поток получает входные данные, он прерывает блокировку / ожидание основного потока, чтобы завершить raw_input, так что он просто возобновляется в верхней части цикла while.
- Это нормально, если я потеряю текущее содержимое raw_input ().
- Решение должно работать только в Linux.
- Я хочу использовать вместо него raw_inputпрямого чтения из stdin, потому что я использую модуль readlines.
Есть несколько связанных с SO вопросов, но ни один из них не решает мою проблему - они не обеспечивают способ прерывания raw_input.Я думаю, что это должно быть возможно с помощью сигналов или исключений, но я еще не выяснил, как.
Спасибо за любые предложения.