multiprocessing.Manager限制资源

时间:2016-07-07 13:01:48

标签: python io multiprocessing

我正在处理大量数据并将它们写入文件(大型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()

这是预期的行为吗?

0 个答案:

没有答案