ВОПРОС · Q&A

python ожидание таймера, либо нажатия клавиши

3 ответов 7,6 тыс.
AI-выжимка обсуждения скоро

Краткие тезисы обсуждения со ссылками на ключевые ответы появятся здесь.

Автор вопроса
Добрый день, нужно выполнить функцию либо по истечению 10сек, либо по нажатию клавиши. Думал о потоках, но не уверен, что знаю как написать грамотно.
 
Добрый день, нужно выполнить функцию либо по истечению 10сек, либо по нажатию клавиши. Думал о потоках, но не уверен, что знаю как написать грамотно.
Можно воспользоваться библиотекой keyboard
Python:
import datetime
import keyboard

def check_state(cur_time=datetime.datetime.now()) -> None:
    new_time = cur_time + datetime.timedelta(seconds=10)
    print("Для продолжения нажмите Enter...")
    while datetime.datetime.now() < new_time:
        if keyboard.is_pressed('Enter'):
            break
    else:
        print("timeout")

check_state()

Функция завершится, если пройдёт больше 10 секунд после её вызова или при нажатии Enter
 
Последнее редактирование:
Можно воспользоваться библиотекой keyboard
Python:
import datetime
import keyboard

def check_state(cur_time=datetime.datetime.now()) -> None:
    new_time = cur_time + datetime.timedelta(seconds=10)
    print("Для продолжения нажмите Enter...")
    while datetime.datetime.now() < new_time:
        if keyboard.is_pressed('Enter'):
            break
    else:
        print("timeout")

check_state()

Функция завершится, если пройдёт больше 10 секунд после её вызова или при нажатии Enter
Все супер, но в таком случае скрипт очень сильно нагружает проц, если способ уменьшить затраты?
 
скрипт очень сильно нагружает проц
Чем же это он нагружает, интересно?

Попробуй так
Python:
import datetime
import keyboard
import time

def check_state(cur_time=datetime.datetime.now()) -> None:
    new_time = cur_time + datetime.timedelta(seconds=10)
    print("Для продолжения нажмите Enter...")
    while datetime.datetime.now() < new_time:
        if keyboard.is_pressed('Enter'):
            break           
        time.sleep(0.5)
    else:
        print("timeout")

check_state()
 

Ещё по теме