我有一个我正在改进的建模应用程序,而且我无法跨多个线程获取实时进度条更新。
每个模型工作单元都映射到一个处理器:
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
内,可以调用The Big Compute Loop。平均而言,遍历该循环的所有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
之前。这种失败的观点。
什么是更改此代码流的好方法,以便我的进度条动态更新控制台?
答案 0 :(得分:0)
https://github.com/aaren/multi_progress做我想做的事。
这在PyCharm控制台中运行了一些非常奇怪的输出,但在真正的终端中运行良好。