Получение информации о потоке исполнения через равные промежутки времени python

Имеется следующий код:

        proc = multiprocessing.Pool(n_cpu)
        proc.map(func, some_data)

как мне параллельно с этим пулом запустить ещё один процесс который бы через заданное время получал информацию о том как обстоят дела в каждом из потоков пула?

p.s. костыльно получалось сделать с очередью только результаты получались отдельно по каждому потоку, а не по всем сразу...


Ответы (1 шт):

Автор решения: eri

Похоже результат func Вам не важен.

    proc = multiprocessing.Pool(n_cpu)
    l = len(some_data)
    i = 0
    for res in proc.imap_unordered(func, some_data):
        i+=1
        print('\r', i*100//l, '%', flush=True, end='')

или если результат важен

def map_process(p,f,d):
    l = len(d)
    i = 0
    for r in p.imap(f, d):
       i+=1
       print('\r', i*100//l, '%', flush=True, end='')       
       yield r


proc = multiprocessing.Pool(n_cpu)
result = map_process(proc, func, some_data)

Или асинхронно и недокументированно

proc = multiprocessing.Pool(n_cpu)
jobs = proc.map_async(func, some_data)

while not jobs.ready():
    print('осталось', jobs._number_left)
    jobs.wait(2)
→ Ссылка