因此,在完成了此问题的一些功课之后,似乎multiprocessing.pool()在AWS Lambda中不起作用,但multiprocessing.process()应该起作用。问题是,当我尝试换出新的.process()代码可以使用的代码时,会得到列表,而不是要查找的值。这是我想要做的:
(注意:注释的代码是有效的.pool()示例,而下面的.process()就是中断代码)
def evaluate_plans_parallel(foo, baz, bar):
score = {}
input_tuple = []
for k, v in plans.items():
input_tuple.append({'somevar1': k, 'somevar3': v, 'somevar': foo,'somevar2': baz})
# score_list = []
# pool = multiprocessing.Pool(get_parallel_count())
# pool = multiprocessing.Pool(3)
# score_list = pool.map(evaluate_single_plan, input_tuple)
processes = []
score_list = []
for tup in input_tuple:
process = Process(target=evaluate_single_plan, args=(tup,))
processes.append(process)
for process in processes:
process.start()
for process in processes:
process.join()
print(processes)
for x in processes:
for k, v in x.items():
score[k] = v
top_score = sorted(score.values())[0]
print('Top score: {}: '.format(round(top_score, 3)))
return score
我在做明显不正确的事情吗?
答案 0 :(得分:1)
所以事实证明,我需要使用.pipe()同步结果:
processes = []
parent_connections = []
for tup in input_tuple:
parent_conn, child_conn = Pipe()
parent_connections.append(parent_conn)
process = Process(target=evaluate_single_plan, args=(tup, child_conn,))
processes.append(process)
for process in processes:
process.start()
for process in processes:
process.join()
for x in parent_connections:
print(x.recv()])
并在valuate_single_plan函数中,而不是返回一个值,我只需要发送给传入的child_conn参数即可:
child_conn.send(result)
child_conn.close()