Тайм-аут подсказки в быстром наборе инструментов
Я работаю над сценарием многопользовательского приглашения (2.0.7) и хотел бы, чтобы весь сценарий выдавал ошибку, если пользователю требуется более 5 минут для завершения запросов.
Сначала я пытался использовать inputhooks, но, похоже, на самом деле он не создавал отдельную нить для функции обратного вызова. Вместо этого, работая с этим примером, я создал следующее, используя модуль потоков:
import threading
from prompt_toolkit import prompt
from prompt_toolkit.application.current import get_app
def timeout():
get_app().exit(exception=TimeoutError("Took too long to input something."))
# Loops if answers don't meet some conditions.
# These are in addition to validations for each prompt (not shown below)
while True:
running = True
t = threading.Timer(300, timeout)
t.start()
p1 = prompt("Example prompt 1 input: ")
p2 = prompt("Example prompt 2 input: ")
p3 = prompt("Example prompt 3 input: ")
if <some_logic about p1/p2/p3>:
t.cancel()
break
Это более простой способ сделать это? Приведенный выше код в значительной степени работает, но это странно / вводит небольшое состояние гонки, как кажется.