首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多处理:使用tqdm显示进度条。

多处理:使用tqdm显示进度条。
EN

Stack Overflow用户
提问于 2017-01-29 10:58:46
回答 9查看 180.5K关注 0票数 192

为了使我的代码更"pythonic“和更快,我使用multiprocessing和一个map函数发送给它:( a)函数和( b)迭代范围。

注入解决方案(即直接在范围tqdm上调用tqdm.tqdm(range(0, 30)))不适用于多处理(如下面的代码所示)。

进度条从0显示到100% ( python读取代码时?)但它并不表示映射函数的实际进展。

如何显示显示“map”函数在哪一步的进度条?

代码语言:javascript
运行
复制
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()

欢迎任何帮助或建议..。

EN

回答 9

Stack Overflow用户

发布于 2017-07-24 09:25:58

使用imap而不是map,后者返回处理后的值的迭代器。

代码语言:javascript
运行
复制
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))
票数 211
EN

Stack Overflow用户

发布于 2020-01-25 00:29:38

很抱歉迟到了,但是如果您只需要一个并发映射,我就在tqdm>=4.42.0中添加了这个功能

代码语言:javascript
运行
复制
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_workerschunksize,您也可以轻松地从process_map切换到thread_map

票数 163
EN

Stack Overflow用户

发布于 2019-03-26 22:08:51

您可以使用p_tqdm代替。

tqdm

代码语言:javascript
运行
复制
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)))
票数 34
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41920124

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档