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
之前。這種打敗點。
什麼是改變此代碼流的好方法,以便我的進度條動態更新控制檯?