【问题标题】:Estimated Time for script Python ( with progress bar)脚本 Python 的预计时间(带进度条)
【发布时间】:2020-04-21 17:56:33
【问题描述】:

我有一个这样的 Python 脚本:

def foo():
     #code 

def bar():
     #code

def baz():
     #code 

if __name__ == '__main__':

     #code

上面的代码是一个简单的代码,用于抓取一些网站并获取各种信息,主要是我创建了一个数据框。

我需要知道(当我启动脚本时)已经过去了多少时间以及还剩下多少时间。我读过一些关于进度条的内容但请不要回答:“使用

from tqdm import tqdm
for i in tqdm(range(10000)):
    ...

"。

我最终需要知道如何精确地实现代码以在我的脚本中获取进度条。我只写了一个示例代码,因为不需要真正的代码来添加一些条(我的问题是,如果使用 tqdm 或进度条等库,我不知道在哪里插入循环或类似的东西)

谢谢

【问题讨论】:

  • "没有必要有真实的代码来添加一些吧"你如何估计未知代码的运行时行为?

标签: python


【解决方案1】:

你真正需要的是在你的函数中有一个iterable,然后调用tqdm(iterable)

所以,如果你的功能是:

def foo():
    for i in range(10000):
        # code

然后你应用你提供的例子:

def foo():
    for i in tqdm(range(10000)):
        # code

或同等学历:

def foo():
    for i in trange(10000):
        # code

因此,如果您的函数依赖于可迭代的循环,您可以轻松实现它。但如果没有,那么你应该看看如何添加类似的东西。例如,您可以创建更多函数以将它们用作步骤:

def foo():
   for step in tqdm(range(3)):
       foo_step(step)

def foo_step(step):
    if step==0:
        # code step 0
    elif step==1:
        # code step 1
    elif step==2:
        # code step 2
    else:
        return -1

但这并没有考虑到这些步骤可能会持续不同的时间。但是,如果您已经知道或估计它们可以持续多久,您可以这样做:

def foo():
   with tqdm(total=100) as pbar:
       for step in tqdm(range(3)):
           foo_step(step)

       def foo_step(step):
           if step==0:
               pbar.update(STEP_0_%_TIME)
               # code step 0
           elif step==1:
               pbar.update(STEP_1_%_TIME)
               # code step 1
           elif step==2:
               pbar.update(STEP_2_%_TIME)
               # code step 2
           else:
               return -1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-28
    相关资源
    最近更新 更多