小编典典

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

all

为了使我的代码更“pythonic”和更快,我使用“multiprocessing”和一个映射函数来发送它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()

欢迎任何帮助或建议…


阅读 71

收藏
2022-08-17

共1个答案

小编典典

找到解决方案。当心!由于多处理,估计时间(每个循环的迭代、总时间等)可能不稳定,但进度条运行良好。

注意:上下文管理器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 _ in p.imap_unordered(_foo, range(0, max_)):
                pbar.update()
2022-08-17