ich versuche seit einigen Tagen herauszufinden, wie ich den Inhalt von Dateien zügig mithilfe von 'multiprocessing' einlesen kann, verarbeiten und wieder speichern kann. Ich habe in einem Ordner einige hundert Dateien, die jeweils einige tausend Zahlenwerte enthalten und möchte diese in einer Matrix speichern. Ich habe mich jetzt einige Zeit daran versucht, nur leider bin ich noch nicht dahinter gestiegen, da ich auch noch eher ein Python-Neuling bin. Ich habe einen Code im Internet gefunden, der für mein Problem glaube ich geeignet ist, und habe versucht ihn umzuschreiben. Hier ist meine umgeschriebene Version (Erklärung unten):
Code: Alles auswählen
import numpy as np
import multiprocessing
import math
def writedata(rs,out_q):
data_sim=np.zeros((4281,80))
for kkk in rs:
rs_str=str(kkk)
fnrs = '../OUTPUT_FILES' + '/Datei' + rs_str
data_sim_rec=np.genfromtxt(fnrs)
data_sim_rec=np.array([data_sim_rec[:,1]]).T
data_sim[:,kkk]=data_sim_rec[:,0]
out_q.put(data_sim)
rs=np.arange(1,80,1)
nprocs=10
out_q=multiprocessing.Queue()
chunksize=int(math.ceil(len(rs)/float(nprocs)))
procs=[]
for i in range(nprocs):
p=multiprocessing.Process(target=writedata,args=(rs[chunksize*i:chunksize*(i+1)],out_q))
procs.append(p)
p.start()
resultdict={}
for i in range(nprocs):
resultdict.update((out_q.get()))
for p in procs:
p.join()
data_sim=resultdict
Ich definiere die Funktion writedata, die in den Ordner mit hier beispielhaften 80 Dateien geht, die Dateien der Reihe nach in data_sim_rec ausliest und den zweiten Reiheneintrag in der Matrix data_sim an entsprechender Stelle speichern soll. Diese Matrix soll in einem Queue gespeichert werden. Ich verteile danndie Jobs über eine Liste mit Zahlen für den Loop an die verschiedenen Prozessoren.
Danach sollen die Daten in resultdict gespeichert werden. Die aktuelle Fehlermeldung lautet
Code: Alles auswählen
"dictionary update sequence element #0 has length 80, 2 is required."
Ich wäre über etwas Hilfe sehr dankbar Der Code ist in 2.7 geschrieben.
Beste Grüße,
Max