[英]Python event loop — multithreading — How to run two bits of code simultaneously?
因此,我試圖利用msvcrt.getch()
在程序中的任何位置做出退出(不使用KeyBoardInterrupt的選項msvcrt.getch()
的選項。
我的代碼當前如下所示:
導入msvcrt導入sys
打印(“隨時按q退出”)
while True:
pressedKey = msvcrt.getch()
if pressedKey == 'q':
sys.exit()
else:
# do some setup
if myvar == "string":
try:
# do stuff
except:
# do stuff
else:
#do stuff
如何在運行另一個循環的同時運行while循環以檢測q的按鍵( # do stuff
塊)?
這樣,如果用戶繼續使用該程序,他們將只運行一次。 但是,如果他們按q ,則程序將退出。
您可以在單獨的線程中讀取鍵,也可以(最好) 使用msvcrt.kbhit()
如@martineau建議的那樣 :
#!/usr/bin/env python
import msvcrt
from Queue import Empty, Queue
from threading import Thread
def read_keys(queue):
for key in iter(msvcrt.getch, 'q'): # until `q`
queue.put(key)
queue.put(None) # signal the end
q = Queue()
t = Thread(target=read_keys, args=[q])
t.daemon = True # die if the program exits
t.start()
while True:
try:
key = q.get_nowait() # doesn't block
except Empty:
key = Empty
else:
if key is None: # end
break
# do stuff
如果我想在第二個線程檢測到某個按鍵時在主代碼中執行某項操作,該如何處理?
在代碼再次到達q.get_nowait()
之前,您不會對主線程中的按鍵作出反應,即,直到“ do stuff”完成循環的當前迭代之前,您不會注意到按鍵。 如果您需要執行可能需要很長時間的操作,則可能需要在另一個線程中運行它(如果可以接受某個時刻的阻塞,則可以啟動新線程或使用線程池)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.