使用python进行多重处理:保存“合并”功能的对象

时间:2019-01-14 13:28:04

标签: python multiprocessing

只想知道一种方法来保存我在多进程环境(python 3.5)中合并的函数中的对象。

要合并的代码(一个简单的示例):

import numpy as np

vct_list = [0, 1]

def f_to_pool(vector_list):
    chosen_nmb = np.random.choice(vector_list)
    status_ = True if chosen_nmb == 0 else False
    return chosen_nmb * 4, status_

scenarios = range(100)

numbers_processed = []
all_status = []

for _ in scenarios:
    nmb_processed, status = f_to_pool(vct_list)
    numbers_processed.append(nmb_processed)
    all_status.append(status)

而多处理框架为multiprocessing.Pool

pool = multiprocessing.Pool(nmb_of_proc)
results = pool.map(function, objects)
pool.close()

问题在于,即使我可以异步运行in并收集文档(https://docs.python.org/3.5/library/multiprocessing.html#using-a-pool-of-workers中所示的结果,该过程也将保持不变,并且由于我正在使用此技术来扩展我的计算能力(这不是I / O问题),对我来说毫无用处。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

您的研究是正确的,您可以将两者结合在一起:

import multiprocessing

def your_time_consuming_function(i):
    status = bool(i % 2)
    return i * 4, status

def run(scenarios_list):
    with multiprocessing.Pool(4) as pool:
        return pool.map(your_time_consuming_function, scenarios_list)

scenarios = range(8)

print(run(scenarios))

然后将产生这样的结果:

[(0, False), (4, True), (8, False), (12, True), (16, False), (20, True), (24, False), (28, True)]