为了使我的代码更"pythonic“和更快,我使用multiprocessing
和一个map函数发送给它:( a)函数和( b)迭代范围。
注入解决方案(即直接在范围tqdm
上调用tqdm.tqdm(range(0, 30))
)不适用于多处理(如下面的代码所示)。
进度条从0显示到100% ( python读取代码时?)但它并不表示映射函数的实际进展。
如何显示显示“map”函数在哪一步的进度条?
from multiprocessing import Pool
import tqdm
import time
def _foo(my_number):
square = my_number * my_number
time.sleep(1)
return square
if __name__ == '__main__':
p = Pool(2)
r = p.map(_foo, tqdm.tqdm(range(0, 30)))
p.close()
p.join()
欢迎任何帮助或建议..。
发布于 2017-07-24 09:25:58
使用imap
而不是map
,后者返回处理后的值的迭代器。
from multiprocessing import Pool
import tqdm
import time
def _foo(my_number):
square = my_number * my_number
time.sleep(1)
return square
if __name__ == '__main__':
with Pool(2) as p:
r = list(tqdm.tqdm(p.imap(_foo, range(30)), total=30))
发布于 2020-01-25 00:29:38
很抱歉迟到了,但是如果您只需要一个并发映射,我就在tqdm>=4.42.0
中添加了这个功能
from tqdm.contrib.concurrent import process_map # or thread_map
import time
def _foo(my_number):
square = my_number * my_number
time.sleep(1)
return square
if __name__ == '__main__':
r = process_map(_foo, range(0, 30), max_workers=2)
参考文献:https://tqdm.github.io/docs/contrib.concurrent/和bars.py
它支持max_workers
和chunksize
,您也可以轻松地从process_map
切换到thread_map
。
发布于 2019-03-26 22:08:51
您可以使用p_tqdm
代替。
from p_tqdm import p_map
import time
def _foo(my_number):
square = my_number * my_number
time.sleep(1)
return square
if __name__ == '__main__':
r = p_map(_foo, list(range(0, 30)))
https://stackoverflow.com/questions/41920124
复制相似问题