为了使我的代码更“ 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()