#python #tips : Распараллеливание и progress bar
Как контролировать многопоточное применение функции к массиву данных?
- С появлением
- Также мало для кого секрет, что функции map проста для распараллеливания с помощью встроенной библиотеки
Но что, если вы хотите следить за процессом распараллеленного выполнения с помощью
Есть решение! Вот пример:
где
❗️`imap_unordered` возвращает результаты не обязательно в порядке входных данных. Потому, если вам важно понимать, результатом каких входных значений является выходное значение, возвращайте идентификатор, по которому восстановите к чему относился результат.
Код примера на github: https://xxtt.ru/6b4d
Как контролировать многопоточное применение функции к массиву данных?
- С появлением
tqdm стало проще контролировать процесс прохода по циклу (про tqdm: https://xxtt.ru/60c8)- Также мало для кого секрет, что функции map проста для распараллеливания с помощью встроенной библиотеки
multiprocessing (хорошая статья про это: https://xxtt.ru/c6c6)Но что, если вы хотите следить за процессом распараллеленного выполнения с помощью
multiprocessing?Есть решение! Вот пример:
from multiprocessing import Pool
from tqdm import tqdm_notebook
def pow_2(n):
import time
sq_n = n ** 2
time.sleep(0.1) # slow function 🙂
return (n, sq_n)
def imap_unordered_bar(func, args, n_jobs):
p = Pool(n_jobs)
res_list = [x for x in tqdm_notebook(
p.imap_unordered(func, args),
total=len(args)
)]
p.close()
p.join()
return res_list
result = imap_unordered_bar(pow_2, range(100), n_jobs=10)
где
args - массив данных к которому вы хотите параллельно применить функцию func❗️`imap_unordered` возвращает результаты не обязательно в порядке входных данных. Потому, если вам важно понимать, результатом каких входных значений является выходное значение, возвращайте идентификатор, по которому восстановите к чему относился результат.
Код примера на github: https://xxtt.ru/6b4d
#python #tips #libs :
Есть
А что, если
Да так, что в один чат будут приходить ProgressBar с разных скриптов или даже серверов.
Достаточно установить легковесную либу. Как это сделать и как ее использовать, смотрите в репозитории https://xxtt.ru/5098
tqdm в телефонеtqdm - сделала жизнь проще. Но как следить за долгим процессом итерации? Да так, чтобы можно было оторваться от компьютера, поиграть с детьми, провести время с женой, но при этом держать руку на пульсе.Есть
hyperdash, но придется ставить приложение и огромную либу, при этом будут сыпаться логи, а мы то хотим ProgressBar.А что, если
tqdm можно засунуть в telegram?Да так, что в один чат будут приходить ProgressBar с разных скриптов или даже серверов.
Достаточно установить легковесную либу. Как это сделать и как ее использовать, смотрите в репозитории https://xxtt.ru/5098