阻止外部循环的最佳方法是什么?

问题描述

我有一个打印微调器的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包。

虽然我不知道该怎么做,但我认为这是可能的。感谢您的帮助!

解决方法

您需要异步运行它,就像多处理库允许您那样做。创建单独的线程时,将在其上留下一个句柄,可用于在希望它停止时将其杀死。

A
,

这是我的一个项目的参考实现。它打印点而不是微调器,但更改很简单:

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) 
,

记录开始时间,如果当前时间-开始时间,则中断循环 持续时间。

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!")

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...