多进程:使用tqdm显示进度条

224
为了让我的代码更加“pythonic”且更快,我使用multiprocessing和一个map函数来将a)函数和b)迭代范围发送给它。但是,针对嵌入式方案(即直接在范围上调用tqdm.tqdm(range(0, 30)) )无法与多进程一起使用(如下面的代码所示)。进度条显示从0到100%(当Python读取代码时?),但它不会指示Map功能的实际进度。如何显示指示'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()

欢迎提供任何帮助或建议...


你能发布进度条的代码片段吗? - Alex
7
对于正在寻找.starmap()解决方案的人:这里提供了一个修补程序,可以添加.istarmap()Pool,它也能够与tqdm一起使用。 - Darkonaut
11个回答

-3
这种方法简单而且有效。
from multiprocessing.pool import ThreadPool
import time
from tqdm import tqdm

def job():
    time.sleep(1)
    pbar.update()

pool = ThreadPool(5)
with tqdm(total=100) as pbar:
    for i in range(100):
        pool.apply_async(job)
    pool.close()
    pool.join()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接