我有一个打印微调器的python脚本。希望这个微调器可以持续直到停止。
spinnerFrames = [
"/",
"-",
"\\",
"|",
]
def spinner():
i = 0
while True:
clearScreen() #function to clear the screen
print(spinnerFrames[i])
i = i + 1
if (i == 3):
i = 0
sleep(0.15)
spinner()
sleep(3)
# break out here
print("Done!")
我知道您可以做sys.stdout.write()
,然后只删除该行,但这已经不重要了。
我想不出停止循环并退出函数的最佳方法。 (继续在我的代码中)我希望能够从调用它的循环中脱颖而出,希望将其制成一个Pip包。
虽然我不知道该怎么做,但我认为这是可能的。感谢您的帮助!
答案 0 :(得分:6)
您需要异步运行它,就像多处理库允许您那样做。创建单独的线程时,将在其上留下一个句柄,可用于在希望它停止时将其杀死。
A
答案 1 :(得分:2)
这是我的一个项目的参考实现。它打印点而不是微调器,但更改很简单:
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)
答案 2 :(得分:0)
记录开始时间,如果当前时间-开始时间,则中断循环 持续时间。
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!")