在python中执行中途停止While循环



我试图在执行中期停止while循环,如果在执行中期反转"runWhile"的值,它只需等待,直到它结束。

问题:每当我按下键盘上的f10时,我需要它立即停止

from pynput import keyboard
import threading
import datetime, time
def exec():
while runWhile:
print("There I go")
time.sleep(3)
print("I overtaken")
time.sleep(3)
print("You cant stop me until I finish")

def on_press(key):
global runWhile # inform function to assign (`=`) to external/global `running` instead of creating local `running`
if key == keyboard.Key.f5:
runWhile = True
t = threading.Thread(target=exec)
t.start()
if key == keyboard.Key.f10:
# to stop loop in thread
print("loading STOPPED", datetime.datetime.now()) #, end='r')
runWhile = False
if key == keyboard.Key.f11:
# stop listener
print("listener TERMINATED", datetime.datetime.now()) #, end='r')
return False


#--- main ---
with keyboard.Listener(on_press=on_press) as listener:
listener.join()

我正在使用pynput,文档在这里

based on @furas code

这是我制作的一个解决方案。我创建了自己的延迟函数如下:

def delay(amount): #delay time in seconds
for i in range(int(amount*60)):
time.sleep(0.01)
if runWhile == False:
return True
break

你会用代替你的延迟

if delay(3):
break

这将等待3秒,但如果在此期间runWhile为false,它将脱离循环。你的代码看起来是这样的:

from pynput import keyboard
import threading
import datetime, time
def delay(amount): #delay time in seconds
for i in range(int(amount*60)):
time.sleep(0.01)
if runWhile == False:
return True
break
def exec():
while runWhile:
print("There I go")
if delay(3):
break
print("I overtaken")
if delay(3):
break
print("You cant stop me until I finish")

def on_press(key):
global runWhile # inform function to assign (`=`) to external/global `running` instead of creating local `running`
if key == keyboard.Key.f5:
runWhile = True
t = threading.Thread(target=exec)
t.start()
if key == keyboard.Key.f10:
# to stop loop in thread
print("loading STOPPED", datetime.datetime.now()) #, end='r')
runWhile = False
if key == keyboard.Key.f11:
# stop listener
print("listener TERMINATED", datetime.datetime.now()) #, end='r')
return False


#--- main ---
with keyboard.Listener(on_press=on_press) as listener:
listener.join()

最新更新