Получение информации о потоке исполнения через равные промежутки времени 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)