Loading

Python多进程pool.map展示进度条方法

关联

Multiprocessing : use tqdm to display a progress bar

方法

使用Pool多进程并行处理任务并返回结果
需要对进度条进行特殊处理

tqdm方法

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__':
   with Pool(2) as p:
      r = list(tqdm.tqdm(p.imap(_foo, range(30)), total=30))

progressbar方法

from multiprocessing import Pool
from progress bar import ProgressBar,Bar,ETA
from time import sleep

def fcn(n):
      sleep(0.1)
      return n*n

feed = range(256)
if __name__ == "__main__":
      with Pool(10) as p:
            widgets = [Bar(),ETA()]
            pbar = ProgressBar(widgets=widgets,maxval=len(feed))
            return = list(pbar(p.imap(fcn,feed)))

注意

  1. 使用map将无法显示进度,从0直接到100没有过程,使用imap可展示遍历过程。
  2. 不加if __name__ == "__main__"会无限报错
  3. 不加list()无法正常显示进度条

参考

How to update single progress bar in multiprocessing map()?

posted @ 2020-06-30 11:24  azureology  阅读(6001)  评论(1编辑  收藏  举报