Тайм-аут подсказки в быстром наборе инструментов - PullRequest
0 голосов
/ 15 апреля 2019

Я работаю над сценарием набора многопользовательских подсказок (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

Это более простой способ сделать это? Приведенный выше код в значительной степени работает, но это странно / вводит небольшое состояние гонки, как кажется.

...