Python 如何在等待API返回值时等待并显示进度信息

Python 如何在等待API返回值时等待并显示进度信息,python,Python,下面是我等待方法调用返回响应的代码。此响应可能需要10到15秒以上 我需要在用户等待方法返回响应时显示一条进度消息。 我的while状态似乎没有显示进度条 response = my_api.execute("get some data") # There is a 10-15 minute delay here... i = 0 while response is None: sys.stdout.write('\r') sys.stdout.write("Fetching MO at

下面是我等待方法调用返回响应的代码。此响应可能需要10到15秒以上

我需要在用户等待方法返回响应时显示一条进度消息。 我的while状态似乎没有显示进度条

response = my_api.execute("get some data")
# There is a 10-15 minute delay here...
i = 0
while response is None:
  sys.stdout.write('\r')
  sys.stdout.write("Fetching MO attribute [%-20s] %d%%" % ('=' * i, 5 * i))
  sys.stdout.flush()
  sleep(0.25)
  i += 1

if response.get_output() != "1 instance(s)":
        raise MyError('Could not fetch data. )

for line in response.get_output():
        # Do the actual processing

您需要线程,一个用于主后台进程,一个用于显示进程:

import sys
import time
import threading
import itertools


done = False
response = None

def animate():        
    i = 0
    while response is None:
      sys.stdout.write('\r')
      sys.stdout.write("Fetching MO attribute [%-20s] %d%%" % ('=' * i, 5 * i))
      sys.stdout.flush()
      time.sleep(0.25)
      i += 1

t = threading.Thread(target=animate)
t.start()

# background process
response = my_api.execute("get some data")
done = True

您需要线程,一个用于主后台进程,一个用于显示进程:

import sys
import time
import threading
import itertools


done = False
response = None

def animate():        
    i = 0
    while response is None:
      sys.stdout.write('\r')
      sys.stdout.write("Fetching MO attribute [%-20s] %d%%" % ('=' * i, 5 * i))
      sys.stdout.flush()
      time.sleep(0.25)
      i += 1

t = threading.Thread(target=animate)
t.start()

# background process
response = my_api.execute("get some data")
done = True

python中有一个集成的库来实现这一点

研究TQM

它非常有用,不需要从头开始构建


如果您确实想从头开始构建一些东西,我相信您需要使用线程,正如前面的回答所述

python中有一个集成的库可以实现这一点

研究TQM

它非常有用,不需要从头开始构建


如果您确实想从头开始构建一些东西,我相信您需要使用线程,正如前面的回答所述

while循环仅在
my_api.execute()
返回后执行,显然此时
response
不是
None
,因此while循环体永远不会进入。while循环仅在
my_api.execute()
返回后执行,显然在这一点上,
response
不是
None
,所以while循环体永远不会被输入。这里的数字500000是多少?这使得我的代码等待的时间太长,甚至超过了100%,因为在while循环中使用了180%…230%。你需要做的是决定进度条本身,决定驱动进度条的检查点,使其保持在边界内。这里的数字500000是多少?这使得我的代码等待的时间太长,甚至超过了100%,因为在while循环中使用了180%…230%。您需要做的是决定进度条本身,决定驱动进度条的检查点,使其保持在边界内。