В то время как цикл в течение некоторого времени

Я программирую на Python. У меня есть такой цикл while

b=time.clock()
while time.clock()-b<3 :
    input("input")

Я хочу завершить цикл ровно через 3 секунды, даже если пользователь еще ничего не ввел! Как я могу это сделать?

Изменить: Что было бы, если бы у меня было data=s.recv(1024), где s — сокет, а не input("input")?

Есть ли общее решение такой проблемы?

Edit2: я использую Python 3.


person Dwayne    schedule 03.02.2011    source источник
comment
возможный дубликат ввода с клавиатуры с тайм-аутом в Python   -  person Lennart Regebro    schedule 03.02.2011


Ответы (2)


input блокирует пользовательский ввод, поэтому вам придется реализовать какой-то асинхронный способ запуска события тайм-аута (или запуска при вводе пользователя)

К счастью, этот ТАК ответ, кажется, имеет именно то, что нужно!

редактировать: и если вы не используете Python 3, вам, вероятно, следует использовать raw_input вместо input

person Daniel DiPaolo    schedule 03.02.2011
comment
Спасибо ! А что было бы, если бы я ждал сообщения (s.recv(1024))? Мне тоже нужно решение этой проблемы. - person Dwayne; 03.02.2011
comment
Если вы ждете сокета, то решение select в связанном вопросе, вероятно, будет вашим лучшим выбором: stackoverflow.com/questions/1335507/ - person Daniel DiPaolo; 03.02.2011
comment
Спасибо еще раз ! Это полезно. - person Dwayne; 03.02.2011

Вы не можете, используя input. input блокирует ожидание ввода пользователем чего-либо; пока он блокируется, у вас нет программного контроля над тем, что происходит. Есть способы запустить сигнал самостоятельно (как здесь, как предложено в другом месте) но это как-то запутанно.

В общем, вы хотите использовать raw_input в этой ситуации, хотя она страдает от той же проблемы. И если вы пишете серьезную программу для взаимодействия с пользователем, вы захотите использовать настоящую структуру графического интерфейса, которая позволит делать эти вещи более простым способом.

person Chris B.    schedule 03.02.2011
comment
Спасибо ! Поскольку я использую Python 3, я думаю, что должен использовать ввод. Что было бы, если бы я ждал сообщения (s.recv(1024))? - person Dwayne; 03.02.2011