我正在处理大量数据并将它们写入文件(大型JSON)。
我已经实现了multiprocessing
以便使用我的所有内核。我想在处理数据时将数据转储到文件,但在并行处理中似乎很棘手。当我运行我的脚本而没有任何存储(一切都留在内存中)时,我可以在资源指示器上观察到使用了整个CPU。没关系。
当我使用另一个从Manager().Queue()
(taken from here)读取的进程或者我在每个进程中将结果追加到文件中时(在阻塞模式下用Manager().Lock()
保护)CPU使用率相等使用一个过程。工人数量的变化没有任何区别。
pool = mp.Pool(processes=8)
manager = mp.Manager()
queue = manager.Queue()
lock = manager.Lock()
# writer_job = pool.apply_async(writer, (queue, ))
# alternative way of creating processes
# jobs = []
# for s in sensors:
# job = pool.apply_async(parseSensor, ([s, queue], ))
# jobs.append(job)
#
# for job in jobs:
# job.get()
# in the same way I am passing lock to processes
pool.map(parseSensor, zip(sensors, [queue] * len(sensors)))
# queue.put('kill')
pool.close()
pool.join()
这是预期的行为吗?