只想知道一种方法来保存我在多进程环境(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问题),对我来说毫无用处。
有什么建议吗?
答案 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)]