显示具有多重处理的控制台进度条

时间:2016-03-02 20:53:08

标签: python console-application progress python-multiprocessing

我有一个我正在改进的建模应用程序,而且我无法跨多个线程获取实时进度条更新。

每个模型工作单元都映射到一个处理器:

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之前。这种失败的观点。

什么是更改此代码流的好方法,以便我的进度条动态更新控制台?

1 个答案:

答案 0 :(得分:0)

https://github.com/aaren/multi_progress做我想做的事。

这在PyCharm控制台中运行了一些非常奇怪的输出,但在真正的终端中运行良好。