Показывать несколько индикаторов прогресса и обновлять их одновременно, не печатая лишних строк - PullRequest
0 голосов
/ 30 января 2019

Версия 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

и так далее ...?

...