Индикатор выполнения TQDM и многопроцессорность - PullRequest
0 голосов
/ 03 мая 2018

Я пытаюсь добавить индикатор прогрессии в мою программу, однако решения, которые, похоже, работают для других (в других сообщениях), не работают для меня.

Python версия 3.6.

import multiprocessing as mp
import tqdm

def f(dynamic, fix1, fix2):
    return dynamic + fix1 + fix2

N = 2

fix1 = 5
fix2= 10

dynamic = range(10)

p = mp.Pool(processes = N)

for _ in tqdm.tqdm(p.starmap(f, [(d, fix1, fix2) for d in dynamic]), total = len(dynamic)):
    pass

p.close()
p.join()

Есть идеи, почему работает многопроцессорная система (вычисления выполнены), но индикатор выполнения отсутствует?

NB. Пример выше - пустышка, у меня другие функции.

Другой вопрос: как правильно прервать многопроцессорную программу? ctrl + C , который я обычно делаю в цепочке подписей, кажется, создает некоторые проблемы.

1 Ответ

0 голосов
/ 28 ноября 2018

К сожалению, tqdm не работает с starmap. Вы можете использовать следующее:

def f(args):
  arg1, arg2 = args
  ... do something with arg1, arg2 ...


for _ in tqdm.tqdm(pool.imap_unordered(f, zip(list_of_args, list_of_args2)), total=total):
    pass
...