Ich versuche, eine JSON-Datei mit multiprocessing
zu ändern. Ich wäre in der Lage, den JSON in Chunks aufzuteilen, so dass jeder Prozess nur Zugriff auf einen bestimmten Teil des JSON hat und diesen verändert (es ist also garantiert, dass keine zwei Prozesse dasselbe Attribut modifizieren wollen). Meine Frage ist, wie kann ich das JSON-Objekt zwischen Prozessen freigeben, so dass die Änderungen auf dem ursprünglichen Objekt widergespiegelt werden? Ich weiß, dass multiprocessing
das Objekt als Kopie übergibt, also müsste ich eine Manager()
verwenden, aber wie genau kann ich das tun? Zur Zeit habe ichPython Multiprocessing - JSON über mehrere Prozesse ändern
def parallelUpdateJSON(datachunk):
for feature in datachunk:
#modify chunk
def writeGeoJSON():
with open('geo.geojson') as f:
data = json.load(f)
pool = Pool()
for i in range(0, mp.cpu_count())):
#chunk data into a list, so I get listofchunks = [chunk1, chunk2, etc.,]
#where chunk1 = data[0:chunksize], chunk2 = data[chunksize:2*chunksize] etc.
pool.map(parallelUpdateJSON, listofchunks)
pool.close()
pool.join()
with open('test_parallel.geojson', 'w') as outfile:
json.dump(data, outfile)
Aber natürlich diese übergibt die Brocken als Kopien, so dass die ursprüngliche data
Objekt nicht geändert hat bekommen. Wie kann ich es so machen, dass data
tatsächlich von den Prozessen geändert wird? Vielen Dank!
Sie benötigen eine Warteschlange zu verwenden, in dem Sie die JSON-Objekte setzen zu ändern, und eine andere Warteschlange, in der die Prozesse wird das Ergebnis – BlackBear