当前位置: 首页 > 面试题库 >

多重处理:使用tqdm显示进度条

笪智志
2023-03-14
问题内容

为了使我的代码更“ Pythonic”且更快,我使用“multiprocessing”和一个map函数向其发送a)函数和b)迭代范围。

植入的解决方案(即直接在范围tqdm.tqdm(range(0,30))上调用tqdm不适用于多重处理(如以下代码中所述)。

进度条显示为0到100%(当python读取代码时?),但是它并不表示map函数的实际进度。

如何显示进度条以指示“地图”功能在哪一步?

from multiprocessing import Pool
import tqdm
import time

def _foo(my_number):
   square = my_number * my_number
   time.sleep(1)
   return square

if __name__ == '__main__':
   p = Pool(2)
   r = p.map(_foo, tqdm.tqdm(range(0, 30)))
   p.close()
   p.join()

欢迎任何帮助或建议…


问题答案:

找到的解决方案:注意!由于进行了多处理,估计时间(每个循环的迭代次数,总时间等)可能不稳定,但是进度条可以正常工作。

注意:Pool的上下文管理器仅在Python 3.3版中可用

from multiprocessing import Pool
import time
from tqdm import *

def _foo(my_number):
   square = my_number * my_number
   time.sleep(1)
   return square

if __name__ == '__main__':
    with Pool(processes=2) as p:
        max_ = 30
        with tqdm(total=max_) as pbar:
            for i, _ in enumerate(p.imap_unordered(_foo, range(0, max_))):
                pbar.update()


 类似资料:
  • 问题内容: 我有一个脚本,该脚本通过调用成功完成了一个多处理池任务集: 但是,我大约有25万,所以锁将主线程锁定了10秒钟左右,我希望能够逐步回显命令行以显示主进程未锁定。就像是: 是否有用于结果对象或池本身的方法来指示剩余任务数?我尝试使用对象作为计数器(完成其任务后调用操作),但是在停止递增之前,计数器仅达到总值的〜85%。 问题答案: 无需访问结果集的私有属性:

  • 本文向大家介绍python tqdm实现进度条的示例代码,包括了python tqdm实现进度条的示例代码的使用技巧和注意事项,需要的朋友参考一下 一、前言 \quad \quad 有时候在使用Python处理比较耗时操作的时候,为了便于观察处理进度,这时候就需要通过进度条将处理情况进行可视化展示,以便我们能够及时了解情况。这对于第三方库非常丰富的Python来说,想要实现这一功能并不是什么难事。

  • 问题内容: 我目前正在尝试为 多处理OpenCV视频* 流开发 GUI 。下面的代码确实成功执行了此操作,因为它显示了视频供稿和一个“退出”按钮,但是运行方式很奇怪: * 该程序 在退出时* (通过单击或通过单击关闭窗口)在(我正在使用Windows)中引发 运行时错误 ,表示程序“要求运行时以异常方式终止” * 关于如何解决该问题的任何想法将不胜感激! 我的代码: 配置:Windows 7 Ho

  • 我使用下载管理器api下载大文件,我也实现了。但问题是,下载进度通知显示在状态栏中。但是我想用进度条在活动中显示通知。有人做过吗,如果有请帮帮我。

  • 本文向大家介绍Python的Tqdm模块实现进度条配置,包括了Python的Tqdm模块实现进度条配置的使用技巧和注意事项,需要的朋友参考一下 tqdm官网地址:https://pypi.org/project/tqdm/ Github地址:https://github.com/tqdm/tqdm 简介        Tqdm 是一个快速,可扩展的Python进度条,可以在 Python 长循环中

  • 问题内容: 我有一个多线程函数,我想使用一个状态栏。有没有一种简单的方法来显示状态栏?正是并行化部分使我感到困惑。 问题答案: 你可以用周围,如下跟踪进度: 这是您的示例: 结果是这样的: