Python 阻止外部循环的最佳方法是什么?
我有一个打印微调器的python脚本。这个旋转器有望一直持续到停止Python 阻止外部循环的最佳方法是什么?,python,python-3.x,loops,break,Python,Python 3.x,Loops,Break,我有一个打印微调器的python脚本。这个旋转器有望一直持续到停止 喷丝板框架=[ "/", "-", "\\", "|", ] def微调器(): i=0 尽管如此: clearScreen()#用于清除屏幕的函数 打印(喷丝板框架[i]) i=i+1 如果(i==3): i=0 睡眠(0.15) 微调器() 睡眠(3) #在这里爆发 打印(“完成!”) 我知道你可以做sys.stdout.write(),然后只删除那一行,但这不是重点 我想不出停止循环并退出函数的最佳方法。(在我的代码中继
喷丝板框架=[
"/",
"-",
"\\",
"|",
]
def微调器():
i=0
尽管如此:
clearScreen()#用于清除屏幕的函数
打印(喷丝板框架[i])
i=i+1
如果(i==3):
i=0
睡眠(0.15)
微调器()
睡眠(3)
#在这里爆发
打印(“完成!”)
我知道你可以做sys.stdout.write()
,然后只删除那一行,但这不是重点
我想不出停止循环并退出函数的最佳方法。(在我的代码中继续)我希望能够从您称之为的循环中分离出来,因为我希望这是一个Pip包
我想这是可能的,尽管我不知道怎么做。谢谢你的帮助 您需要异步运行它,就像多处理库允许您这样做一样。当你创建一个单独的线程时,你会在它上面留下一个句柄,当你想要它停止时,你可以用它来杀死它
from multiprocessing import Process
from time import sleep
spinnerFrames = [
"/",
"-",
"\\",
"|",
]
def spinner():
i = 0
while True:
print(spinnerFrames[i], end='\r')
i = i + 1
if (i == 3):
i = 0
sleep(0.15)
if __name__ == '__main__':
p = Process(target=spinner)
p.start()
sleep(3)
p.terminate()
print("Done!")
记录开始时间,如果当前时间-开始时间> 持续时间
import time
spinnerFrames = [
"/",
"-",
"\\",
"|",
]
def spinner():
i = 0
startTime = time.time()# record starting time
duration = 3
while True:
clearScreen() #function to clear the screen
print(spinnerFrames[i])
i = i + 1
if (i == 3):
i = 0
if time.time() - startTime > duration:
break
sleep(0.15)
spinner()
print("Done!")
下面是我的一个项目的参考实现。它打印的是点而不是微调器,但更改起来很简单:
import threading
import time
def indicate_wait(func):
active = threading.Lock()
def dot_printer():
while active.locked():
print('.', end='', flush=True)
time.sleep(1)
def wrapper(*args, **kwargs):
t = threading.Thread(target=dot_printer)
active.acquire()
t.start()
res = func(*args, **kwargs)
active.release()
return res
return wrapper
例如:
@indicate_wait
def test():
time.sleep(5)
你不能。当您执行
sleep(0.15)
时,解释器将在spinner()函数中休眠。您应该在循环内部检查是否满足条件(例如,您等待的任何操作都已完成),然后在满足条件时中断。在循环完成且函数返回到当前设置之前,您的代码永远不会到达“在此中断”部分,如果希望在执行其余代码时将微调器作为另一个进程运行,则需要查看多进程这更多的是注释而不是答案。我建议将其添加为问题的注释,或者编写一个示例作为答案进行解释。如何异步运行它?我可以。谢谢你让我知道。我对这整件事还不熟悉,所以我仍然习惯于答案应该是什么样子。@RevelveCarlbergwest这是python异步的一个很好的起点-@superbrain不确定他们不需要包含代码。我可以这样做,但我只想在我想的时候爆发,而不是持续时间。微调器持续到某个加载完成的时间点不是设定的时间量。