Python多重处理:循环浏览文件以导出数据

时间:2019-12-06 15:36:31

标签: python loops for-loop multiprocessing python-multiprocessing

我写了一段代码,从特定的文件格式提取数据并导出到* .csv文件。我正在循环处理多个相同格式的文件。这样,我只使用计算机的一个内核(加载量小于15%),因此转换我拥有的所有文件都需要很长时间。因此,我尝试进行多处理,以便在使用全部CPU能力的情况下并行完成我的工作。

我编写的以下代码无法循环使用,希望获得有关如何正确使用方法的建议。

谢谢。

这是我完整的代码。

from pathlib import Path
from win32com.client import Dispatch
import os
import multiprocessing as mp

# Provide path to import and export data
import_path = r'C:\Data_Analysis\New_folder.' # data folder path 
export_path = r'C:\Data_Analysis\New_folder\Export' # CSV file export folder path

def multiprocessing_func(filenames):

 for filenames in Path(import_path).rglob('*.dxz'):   
 # Call DCOM object
  dw = Dispatch("Dewesoft.App")

 # Initialise the software
  dw.Init()

  # Load data file
  dw.LoadFile(filenames)

  # Change the channels property
  for i in range(0, dw.Data.AllChannels.Count):        
      dw.Data.AllChannels.Item(i).Exported = True
      dw.Data.AllChannels.Item(i).CustExportRate = 1

# Extract file name from imported file
  ExpName = os.path.basename(filenames)
  ExportName = os.path.splitext(ExpName)[0]

# Export data to CSV file
  dw.ExportData(7, 1, export_path + "\\" + ExportName + ".csv")

# Close the software
dw = None

if __name__ == '__main__':
  pool = mp.Pool()
  pool.map(multiprocessing_func, Path(import_path).rglob('*.dxz'))
  pool.close()
  pool.join()

1 个答案:

答案 0 :(得分:0)

您的脚本中还有一个简单的错误:您尚未使用filenames的{​​{1}}参数。这就是为什么您现在看不到任何多处理的原因。

在python文档状态下,使用默认进程数调用multiprocessing_func很好

  

processes是要使用的辅助进程数。如果进程为None,则使用os.cpu_count()返回的数字。