Heim  >  Artikel  >  Backend-Entwicklung  >  Wie implementiert man einen Tastaturhandler mithilfe einer BlockingQueue in Python?

Wie implementiert man einen Tastaturhandler mithilfe einer BlockingQueue in Python?

Susan Sarandon
Susan SarandonOriginal
2024-10-30 12:47:02264Durchsuche

How to Implement a Keyboard Handler Using a BlockingQueue in Python?

Eine der einfachsten Möglichkeiten, einen Tastaturhandler zu implementieren, der bei jedem Tastendruck eine Funktion aufruft (dies funktioniert sowohl unter Linux als auch unter Windows), ist die Verwendung einer BlockingQueue und Ein Thread, der die Taste beim Drücken in die Warteschlange stellt und die Warteschlange sie später in Ihrem Code abruft. Hier ist eine einfache Implementierung:

<code class="python">import queue
import sys
import threading

# blocking
q = queue.Queue()
last_input = 0.0


def input_thread(q):
    global last_input
    while True:
        ch = sys.stdin.read(1)
        last_input = time.time()
        print("got key: '{}'".format(ch))
        q.put(ch)

if __name__ == '__main__':
    t = threading.Thread(target=input_thread, args=(q,))
    t.daemon = True
    t.start()

    last_input_time = last_input

    while True:
        if not q.empty() and (time.time() - last_input) < 5:
            print("polling '{}' in the queue".format(q.get()))

        if time.time() - last_input_time > 5:
            print("nothing in the queue for a while")
            raise RuntimeError("no input")</code>

Das obige ist der detaillierte Inhalt vonWie implementiert man einen Tastaturhandler mithilfe einer BlockingQueue in Python?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn