为了使我的代码更加“pythonic”和更快,我使用“多处理”和一个map函数来发送它a)函数和b)迭代范围。
植入的解决方案(即,直接在范围tqdm上调用tqdm。tqdm(范围(0,30))不适用于多处理(如下面的代码中所述)。
进度条从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()
欢迎任何帮助或建议。。。
根据Xavi martinez的回答,我编写了函数
imap_unordered_bar
。它可以与imap_unordered
以相同的方式使用,唯一的区别是显示了一个处理条。解决方法:小心!由于多处理,估计时间(每个循环的迭代次数、总时间等)可能不稳定,但进度条工作得很好。
注意:池的上下文管理器仅在Python3.3版中可用
使用imap而不是map,后者返回已处理值的迭代器。
相关问题 更多 >
编程相关推荐