Я пытаюсь написать метод класса Python, который выполняется в течение фиксированного периода времени, и при необходимости изменить переменную экземпляра класса во время выполнения.Для моего проекта мне нужен метод read_key
в следующем коде, чтобы он работал ровно 5 секунд (не больше, не меньше).
В течение этих 5 секунд я использую getch.getch()
, чтобы попытаться прочитать один символ с клавиатуры и назначить его переменной экземпляра self.key
.Потому что getch.getch()
будет блокировать выполнение своего процесса, пока не будет обнаружено нажатие клавиши.Если пользователь не нажимает никакую клавишу в этом 5-секундном окне, пусть self.key
будет None
.
Пока что я могу думать только об использовании multiprocessing
и join()
для его реализации.5 секундный эффект «таймера».
import getch
import multiprocessing
class A:
def __init__(self):
self.key = None
self.read_key()
# to check whether instance variable is successfully modified
print(self.key)
def read_key(self):
def scan():
self.key = None
while True:
key = getch.getch()
if key == 'a':
self.key = key
print('updated self key to ' + str(self.key))
else:
print('invalid entry ' + str(key))
p = multiprocessing.Process(target=scan)
p.start()
p.join(5)
p.terminate()
if __name__ == '__main__':
A()
Запуск приведенного выше кода занимает 5 секунд.Если пользователь нажимает клавишу a после запуска программы, я ожидаю, что распечатка будет:
'updated self key to a'
'a'
То, что я на самом деле вижу:
'updated self key to a'
None
Видимо, дажехотя self.key = key
выполняется, фактическая переменная экземпляра self.key
.Любая идея, почему и как изменить self.key
, если пользователь нажимает клавишу a ?