2017-09-28 571 views
0

我正在并行处理多个大规模csv文件。我想有一个每个文件的进度条。使用多个tqdm进度条进行多处理

但是,虽然我显示了5个小节,但只有最后一个正在更新 - 看起来像所有进程一次。由于我无法将整个csv文件读入内存,我正在使用文件大小来显示进度。

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,我得到我的酒吧,但只有最后一个更新出于某种原因。 Current progress bars

+0

的可能的复制[如何通过在Python多过程中使用tqdm?](https://stackoverflow.com/questions/ 43064054 /如何使用-tqdm-through-multi-process-in-python) – Sraw

+0

https://stackoverflow.com/questions/45742888/tqdm-using-multiple-bars有什么帮助吗?看起来您可以选择每个栏的显示位置,这样可以查看每个处理的CSV的不同结果。 – bouteillebleu

+0

@bouteillebleu感谢您的评论!我添加了一张图片 - 因为我已经使用位置参数,所以我确实得到了不同的小节。只是更新似乎有点毛病? – Illuminae

回答