Python进程池中实现进度条显示

Python进程池中实现进度条显示

  今天使用进程池爬虫,爬的网页太多,想通过进度条来显示出来,但是发现并没有想象的那么简单。

  Python中多进程使用Queue来数据共享,进程池使用Manager().Queue()来实现数据共享,如果想使用进程回调函数,则进程函数一定要返回参数。

  最后在github一段下面找到解决代码,如下:

import time
import random
from multiprocessing import Pool
from tqdm import tqdm

def myfunc(a):
    time.sleep(random.random())
    return a ** 2

if __name__ == '__main__':
    pool = Pool(2)
    '''
    for _ in tqdm(pool.imap_unordered(myfunc, range(100)), total=100):
        pass
    '''
    pbar = tqdm(total=100)
    def update(*a):
        pbar.update()
        # tqdm.write(str(a))
    for i in range(pbar.total):
        pool.apply_async(myfunc, args=(i,), callback=update)
    # tqdm.write('scheduled')
    pool.close()
    pool.join()

 

posted @ 2020-07-20 20:23  OneTrainee  阅读(2260)  评论(0编辑  收藏  举报