我试图使用Python的multiprocessing
库运行一些计算量大的任务,我想为每个工作人员显示一个TQM进度条。具体来说,我更希望为multiprocessing.Process
工作者或multiprocessing.Pool
工作者提供此功能
我知道关于这个主题也有类似的StackOverflow问题(例如,见(1)Multiprocessing : use tqdm to display a progress bar,(2)Show the progress of a Python multiprocessing pool imap_unordered call?,(3)tqdm progress bar and multiprocessing),但他们似乎都对在所有员工中显示一个进度条感兴趣。我想为每个工人显示一个进度条
下面是一个示例函数,它取代了我希望进行多处理的计算量大的函数:
from tqdm import notebook
import time
def foo2(id):
total = 100
with notebook.tqdm(total=total, position=id) as pbar:
for _ in range(0, total, 5):
pbar.update(5)
time.sleep(0.1)
当我按顺序尝试时,我得到了预期的结果:5个进度条一个接一个地填满
但是,当我尝试使用multiprocessing
执行此操作时,我获得了所需的速度,但没有显示任何进度条。无论我使用Pool
工作者还是Process
工作者都是如此。以下是我的示例代码:
%%time
from multiprocessing import Pool
pool = Pool(5)
pool.map(foo2, range(5))
pool.close()
pool.join()
根据这里的评论(https://github.com/tqdm/tqdm/issues/407#issuecomment-322932800),我尝试使用几个ThreadPool
工人,奇怪的是,能够生成进度条。然而,对于我的情况,我更喜欢使用带有进度条的Pool
或Process
工作者
%%time
from multiprocessing.pool import ThreadPool
pool = ThreadPool(5)
pool.map(foo2, range(5))
pool.close()
pool.join()
ThreadPool - progress bars show!
希望有人能帮我。我已经尝试了我能想到的一切。作为参考,我使用Python3.7.7
和tqdm4.57.0
在github主页上的问题帖子中搜索
tqdm
,我发现了一个适合我的黑客,但它确实感觉像是一个“黑客”,而不是一个真正的问题修复:https://github.com/tqdm/tqdm/issues/485#issuecomment-473338308新的(工作)代码如下所示:
加上
相关问题 更多 >
编程相关推荐