使用 curses 模块快速退出具有无限循环的 Python 程序的最佳方法是什么?
我尝试在循环结束时添加 nodelay() 方法以及此方法:
if screen.getch() == ord('q'):
break
但是,在循环的一次迭代中进行所有函数调用需要 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”一次后仍可能需要 8 秒才能退出。
出于显而易见的原因,这似乎不是退出程序的最佳方式。我很确定应该有更好(更快)的解决方案。
除此之外,该程序运行良好。这是 2 个超过 300 行的文件,所以我只发布了代码的相关部分以及我尝试的解决方案。