Версия Python : 3,6
ОС : Windows 10
Я хочу параллельное выполнение функции с несколькими параметрами.По этой причине я использую multiprocessing
object Pool
с методом map
.Поскольку каждый вызов функции длится несколько часов, я хочу отслеживать свой прогресс, используя tqdm
индикатор выполнения.
По этой причине я попробовал следующий код:
from datetime import date, timedelta
from multiprocessing.pool import Pool
from tqdm import tqdm
def some_func(date1):
for i in range(1000000):
pass
def load_data(date1, n_process):
dLength = 100
progressbar = tqdm(range(0, dLength), position=n_process)
for i in range(dLength):
some_func(date1)
progressbar.update(i)
if __name__ == '__main__':
d1 = date(2018, 5, 22)
d2 = date(2018, 5, 26)
delta = d2 - d1
dates_range = []
for i in range(delta.days + 1):
date1 = d1 + timedelta(i)
dates_range.append(date1)
n_processes = 5
with Pool(n_processes) as p:
p.starmap(load_data, zip(dates_range, range(n_processes)))
Проблемав том, что индикаторы прогресса начинают повторяться и их неудобно отслеживать:
0% ||0/101373 [00:00
0% ||0/101373 [00:05
0% ||1/101373 [00:09 <128: 35: 56, 4,57 с / с] 0% ||0/217102 [00:01 <p>0% ||0/214016 [00:00
0% ||3/101373 [00:11 <97:28:47, 3,46 с / с] </p>
0% ||0/214016 [00:01
0% ||6/101373 [00:12 <72:00:37, 2,56 с / мин] 0% ||1/217102 [00:03 <81:07:30, 1,35 с / с] </p>
0% ||1/214016 [00:02 <66:16:01, 1,11 с / мин] 0% ||3/217102 [00:04 <66:47:19, 1.11s / it] </p>
Как я могу преобразовать этот текст в нечто вроде:
0% ||0/101373 [00:00
0% ||0/101373 [00:05
0% ||0/217102 [00:00
0% ||0/101373 [00:09 <128: 35: 56, 4,57 с / с] </p>
0% ||0/217102 [00:01
затем в тех же строках:
0% ||1/101373 [00:00
0% ||5/101373 [00:05
0% ||20/217102 [00:00
0% ||15/101373 [00:09 <128: 35: 56, 4,57 с / с] </p>
0% ||30/217102 [00:01
и так далее ...?