0
我有一个正在完善的建模应用程序,我无法跨多个线程获取实时进度栏更新。使用多进程显示控制台进度条
模型每个工作单元被映射到一个处理器:
Class Main():
def run(self):
s1 = datetime.now()
p = mp.Pool(mp.cpu_count(), maxtasksperchild=1)
p.map(self.solve_one_cochlea, self.cochlear_list)
p.close()
p.join()
print("simulation of {} channels finished in {:0.3f}s".format(self.channels,timedelta.total_seconds(datetime.now()-s1)))
内solve_one_cochlea
,还有的大计算循环调用。平均而言,通过回路的所有7000次迭代越来越需要每线程约45-90秒:
import progressbar
Class Worker:
def long_running_solve:
with progressbar.ProgressBar(max_value=7000, redirect_stdout=True) as bar:
for j in range(7000):
#heavy linear algebra here
bar.update(j)
这是一切都很好,但发生的事情是不是让两个或更多的进步是禁止该更新中我的控制台实时,我得到两个完全完成的进度条,突然出现时全部实例solve_one_cochlea
已完成,就在最后print()
在run
之前。这种打败点。
什么是改变此代码流的好方法,以便我的进度条动态更新控制台?