使用多个tqdm进度条的多进程处理

5

我正在并行处理多个大型csv文件。我希望为每个文件都有一个进度条。

然而,虽然我显示了5个进度条,但只有最后一个被更新 - 似乎是所有进程同时更新的。由于我无法将整个csv文件读入内存,因此我使用filesize来显示进度。

inputArg是以数字结尾的文件夹路径。

def worker(inputArg):
        with open(inputArg + '/data.csv') as csvfile:
                size = os.path.getsize(inputArg + '/data.csv')
                text = "progresser #{}".format(inputArg[-1])
                pb = tqdm(total=size, unit="B", unit_scale=True, desc=text, position=int(inputArg[-1]))
                reader = csv.reader(csvfile, delimiter=',')
                for row in reader:
                        pb.update(len(row))
                        session.execute(*INSERT QUERY*)

    def scheduler(inputData):
            p = multiprocessing.Pool(multiprocessing.cpu_count()+1)
            p.map(worker, inputData)
            p.close()
            p.join()

    if __name__ == '__main__':
            folders = glob.glob('FILEPATH/*')
            print ('--------------------Insert started---------------')
            scheduler(folders)
            print('---------------------All Done---------------------')

任何提示都将不胜感激!

编辑:我确实查看了其他答案,但我明确表示我想要多个进度条,而那个答案只给出了一个。因此,这不是重复的。

编辑2:这是@bouteillebleu的样子,我得到了我的进度条,但由于某种原因只更新了最后一个。 当前进度条


可能是如何在Python中通过多进程使用tqdm?的重复问题。 - Sraw
https://dev59.com/v1cO5IYBdhLWcg3weRhs 有用吗?看起来你可以选择每个进度条所显示的位置,这将使得能够查看每个处理的CSV的不同结果成为可能。 - bouteillebleu
@bouteillebleu 感谢您的评论!我添加了一张图片 - 因为我已经使用了位置参数,所以我确实得到了不同的条形图。只是更新似乎有点故障? - Illuminae
1个回答

1

2
我正在使用tqdm v4.26,但我仍然遇到了问题(似乎只有最后一个进度条更新所有进程)。我很惊讶这个答案被标记为正确。 - elexhobby
1
奇怪的。@elexhobby,可能是因为您的环境不支持嵌套栏 - 请参阅https://github.com/tqdm/tqdm#faq-and-known-issues - casper.dcl

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接