0

Vous cherchez à rendre le code suivant parallèle - il lit les données dans un grand format propriétaire de 9 Go et produit 30 fichiers csv individuels basés sur les 30 colonnes de données. Il prend actuellement 9 minutes par csv écrit sur un ensemble de données de 30 minutes. L'espace de solution des bibliothèques parallèles en Python est un peu écrasant. Pouvez-vous me diriger vers de bons didacticiels/exemples de code? Je n'ai rien trouvé de très instructif.Implémenter le traitement parallèle de la boucle 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

D'où obtenez-vous 'allColumns'? S'il provient d'une source externe, cela serait utile pour écrire une fonction qui s'exécute dans un processus séparé et récupère la colonne nécessaire en fonction de l'index. – sirfz

Répondre

0

une solution peut être d'utiliser Dask http://dask.pydata.org/en/latest/ Un collègue de travail a récemment recommandé à moi qui est la raison pour laquelle je pensais.