0_o*_*0_o 8 python parallel-processing multiprocess progress-bar tqdm
我使用tqdm将进度条添加到了2.7 python代码中,但是它大大降低了我的代码速度。如果没有进度条,则需要12秒,而使用进度条则需要57秒。
没有进度条的代码如下所示:
p = mp.Pool()
combs = various combinations
result = p.map(self.parallelize, combs)
p.close()
p.join()
Run Code Online (Sandbox Code Playgroud)
带有进度条的代码如下:
from tqdm import tqdm
p = mp.Pool()
combs = various combinations
result = list(tqdm(p.imap(self.parallelize, combs), total = 5000))
p.close()
p.join()
Run Code Online (Sandbox Code Playgroud)
有没有一种更好的方法不会降低我的代码速度呢?
是否与使用mapandimap而不是twdm有关?请参阅社区的这个精彩答案。multiprocessing.Pool:map_async 和 imap 有什么区别?
另外,您可以使用(最小迭代)参数调整tqdm的更新频率miniters。如果它确实与tqdm有关,那么降低更新频率可能会解决您的问题。
minters :int 或 float,可选 最小进度显示更新间隔(以迭代为单位)。如果为0且dynamic_minters,将自动调整为相等的mininterval(CPU效率更高,有利于紧密循环)。如果 > 0,将跳过指定迭代次数的显示。调整这个和 mininterval 以获得非常有效的循环。如果你的进度在快速和慢速迭代(网络、跳过项目等)中都不稳定,你应该设置 minters=1。
https://github.com/tqdm/tqdm#usage