DataGym Channel [Power of data]
2.39K subscribers
52 photos
7 videos
1 file
158 links
Канал про Data Science и BigData.

Для связи: @ermakovpetr
Download Telegram
#python #tips : Распараллеливание и progress bar
Как контролировать многопоточное применение функции к массиву данных?
- С появлением 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 : tqdm в телефоне
tqdm - сделала жизнь проще. Но как следить за долгим процессом итерации? Да так, чтобы можно было оторваться от компьютера, поиграть с детьми, провести время с женой, но при этом держать руку на пульсе.
Есть hyperdash, но придется ставить приложение и огромную либу, при этом будут сыпаться логи, а мы то хотим ProgressBar.
А что, если tqdm можно засунуть в telegram?
Да так, что в один чат будут приходить ProgressBar с разных скриптов или даже серверов.
Достаточно установить легковесную либу. Как это сделать и как ее использовать, смотрите в репозитории https://xxtt.ru/5098