2017-09-28 138 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

回答