2016-12-09 11 views
0

次のコードをパラレルにすると、9ギガビットの独自のフォーマットでデータが読み込まれ、30列のデータに基づいて30個の個別のCSVファイルが生成されます。現在、30分のデータセットで書かれたcsvあたり9分かかります。 Pythonの並列ライブラリのソリューション空間は圧倒的です。良いチュートリアル/サンプルコードに私を連れて行くことができますか?私は非常に有益な何かを見つけることができませんでした。forループの並列処理を実装する

for i in range(0, NumColumns): 
    aa = datetime.datetime.now() 
    allData = [TimeStamp] 
    ColumnData = allColumns[i].data # Get the data within this one Column 
    Samples = ColumnData.size   # Find the number of elements in Column data 
    print('Formatting Column {0}'.format(i+1)) 
    truncColumnData = []    # Initialize truncColumnData array each time for loop runs  
    if ColumnScale[i+1] == 'Scale: '+ tempScaleName: # If it's temperature, format every value to 5 characters 
     for j in range(Samples): 
      truncValue = '{:.1f}'.format((ColumnData[j])) 
      truncColumnData.append(truncValue) # Appends formatted value to truncColumnData array 

    allData.append(truncColumnData) #append the formatted Column data to the all data array 

    zipObject = zip(*allData) 
    zipList = list(zipObject) 

    csvFileColumn = 'Column_' + str('{0:02d}'.format(i+1)) + '.csv'  
    # Write the information to .csv file 
    with open(csvFileColumn, 'wb') as csvFile: 
     print('Writing to .csv file') 
     writer = csv.writer(csvFile) 
     counter = 0 
     for z in zipList: 
      counter = counter + 1 
      timeString = '{:.26},'.format(z[0]) 
      zList = list(z) 
      columnVals = zList[1:] 
      columnValStrs = list(map(str, columnVals)) 
      formattedStr = ','.join(columnValStrs) 
      csvFile.write(timeString + formattedStr + '\n') # Writes the time stamps and channel data by columns 
+0

どこから 'allColumns'を取得しますか?外部ソースからのものであれば、別のプロセスで実行され、インデックスに基づいて必要な列を取得する関数を作成すると有益です。 – sirfz

答えて

0

一つの可能​​な解決策は、同僚が最近、私はそれを考えた理由である私にそれをお勧めしますDASK http://dask.pydata.org/en/latest/ を使用することであってもよいです。

関連する問題