【发布时间】:2017-03-05 12:36:56
【问题描述】:
我正在尝试使用multiprocessing 修改 JSON 文件。我将能够将 JSON 拆分为块,以便每个进程只能访问和修改 JSON 的某个部分(因此可以保证没有两个进程想要修改相同的属性)。我的问题是,如何在进程之间共享 JSON 对象,以便将更改反映在原始对象上?我知道,multiprocessing 将对象作为副本传递,所以我需要使用Manager(),但我该怎么做呢?目前我有
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)
当然,这会将块作为副本传递,因此原始 data 对象不会被修改。我怎样才能让data 真正被进程修改?谢谢!
【问题讨论】:
-
您需要使用一个队列来放置要修改的 json 对象,并使用另一个队列来放置结果
标签: python json multiprocessing python-multiprocessing