【问题标题】:Progression bar in output depending on progression of calculation in Python输出中的进度条取决于 Python 中的计算进度
【发布时间】:2018-05-18 11:28:31
【问题描述】:

如果我们假设下面的代码是一个庞大而复杂的代码,持续几分钟或几小时,我们想告诉用户有多少百分比的代码通过了,我该怎么办?

num=1

for i in range(1,100000):
    num=num*i
print(num)

我想用进度条通知用户,类似于安装一些东西。 我检查了here,但我不明白如何根据我的代码进度编写进度条。

在与上述链接类似的示例中,它们定义了睡眠或延迟时间。这是不可接受的。因为我们不知道不同函数不同代码中Python的计算时间。

【问题讨论】:

  • 我们不会为您编写代码或提供建议,除非您展示您迄今为止尝试过的内容。
  • 您链接的问题可以很好地解决您的问题。例如,如果您从接受的答案中获取函数,则只需将 printProgressBar(i, 100000) 添加到循环中。有什么是你无法解决的?
  • @FHTMitchell 你为什么给我反对票?
  • @David 可能是因为 我们不会为您编写代码或提供建议,除非您展示您目前为止的尝试。 请查看How to Ask,尤其是如何提供minimal reproducible example
  • @jdehesa 问题是,他们定义了延迟时间,而我们不知道Python在每个步骤中的计算时间。

标签: python progress-bar


【解决方案1】:

如果您的索引i 对应于您的实际进度,则tqdm 包是一个不错的选择。一个简单的例子:

from tqdm import tqdm
import time

for i in tqdm(range(1000)):
    time.sleep(0.01)  # sleep 0.01s

输出:

1%|          | 1010/100000 [00:10<16:46, 98.30it/s]

编辑:如果进度未知,进度条也可以工作。

def loop_without_known_length():
    # same as above, but the length is not known outside of this function.
    for i in range(1000):
        yield i

for i in tqdm(loop_without_known_length()):
    time.sleep(0.01)

输出:

60it [00:00, 97.23it/s]

【讨论】:

  • 在这段代码中,您正在定义延迟时间0.01,但我们不知道要持续多少秒才能得到答案。即使您为我的示例简单代码编写它,您也不知道计算每个步骤需要多少时间。
  • 另一个问题是,这段代码没有显示填充条,它在彼此下方打印百分比
  • @David 我添加了一个不显示时间的代码 sn-p。
  • @David 如果您在进度条运行时打印某些内容,它将在新行中继续。否则原则上应该在同一行显示进度。
  • 0%| | 0/1000 [00:00&lt;?, ?it/s] 1%| | 7/1000 [00:00&lt;00:15, 64.00it/s] 1%|1 | 13/1000 [00:00&lt;00:16, 59.43it/s] 2%|1 | 17/1000 [00:00&lt;00:18, 51.81it/s] 2%|2 | 21/1000 [00:00&lt;00:21, 46.34it/s] 2%|2 | 25/1000 [00:00&lt;00:23, 41.03it/s] 3%|2 | 29/1000 [00:00&lt;00:25, 38.67it/s] 3%|3 | 32/1000 [00:00&lt;00:26, 36.57it/s] 4%|3 | 36/1000 [00:00&lt;00:26, 36.57it/s]
猜你喜欢
  • 2016-04-13
  • 2023-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多