tqdm
マルチプロセス×tqdmな記事があんましなかったので。
拙記事↓の続編(?)
ちょっとかしこいtqdm① ~ metricsの表示 ~
やりたいこと
- 各データに何かしらの処理をしたい
import os
import time
start = time.time()
# 1秒待つ&二乗を返す関数
def f(x):
time.sleep(1)
value = x * x
print('{}s passed...\t{}\t(pid:{})'.format(
int(time.time() - start), value, os.getpid()))
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
for d in data:
f(d)
- 大変だ!10秒かかってしまった!
普通のmultiprocessing
from multiprocessing import Pool
import os
import time
start = time.time()
# 1秒待つ&二乗を返す関数
def f(x):
time.sleep(1)
value = x * x
print('{}s passed...\t{}\t(pid:{})'.format(
int(time.time() - start), value, os.getpid()))
pool = Pool(processes=10)
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
with pool as p:
p.map(f, data)
- 1秒!天才!
- でもこれどうやってtqdmするんすか?
multiprocessingなtqdm
from multiprocessing import Pool
import os
import time
from tqdm import tqdm
# 1秒待つ&二乗を返す関数
def f(x):
time.sleep(1)
value = x * x
pool = Pool(processes=10)
data = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
with tqdm(total=len(data)) as t:
for _ in pool.imap_unordered(f, data):
t.update(1)
- できた
参考
- http://note.crohaco.net/2017/python-multiprocessing/
- https://www.kaggle.com/liangjiajun/multiprocess-download-image-with-progress-bar
最後に
以上っ!