curses モジュールを使用する無限ループで Python プログラムをすばやく終了する最良の方法は何ですか?
ループの最後にこれと結合した nodelay() メソッドを追加しようとしました:
if screen.getch() == ord('q'):
break
ただし、ループの 1 回の反復ですべての関数呼び出しを行うには 2 ~ 3 秒かかります。また、アプリケーションのために、5 秒ごとよりも頻繁にループを実行しても意味がありません。これは、プログラムを終了する方法が機能するために、「q」を 2 ~ 8 秒間押し続ける必要があることを意味します。
私のコードは次のようになります。
import curses
import time
def main(screen):
refresh_rate = 5
screen.nodelay(1)
# Infinite loop. Displays information and updates it
# every (refresh_rate) # of seconds
while True:
# Makes several http requests
# and passes responses through multiple functions
# Escape infinite loop
if screen.getch() == ord('q'):
break
# Wait before going through the loop again
time.sleep(refresh_rate)
if __name__ == "__main__":
curses.wrapper(main)
私の他の解決策は、 while True を次のように置き換えることでした。
loop = 1
while loop:
#Loop code
if screen.getch() == ord('q'):
loop = -1
この方法では、プログラムを終了するために「q」を押し続ける必要はありません。ただし、「q」を 1 回押した後、終了するまでに最大 8 秒かかる場合があります。
明らかな理由から、これはプログラムを終了する最良の方法ではないようです。私は、より良い(より速い)解決策があるはずだと確信しています。
それ以外は、プログラムは正常に動作します。これは 2 つのファイルで 300 行以上あるため、コードの関連部分だけを試した解決策とともに投稿しています。