python - 如何在 AWS Lambda 中使用 multiprocessing.process() 来替换 .pool()?
问题描述
因此,在对这个问题做了一些功课之后,似乎 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
我在做一些明显不正确的事情吗?
解决方案
所以事实证明我需要使用 .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()])
在 evaluate_single_plan 函数中,我不需要返回一个值,而是只需要发送给传入的 child_conn 参数:
child_conn.send(result)
child_conn.close()
推荐阅读
- javascript - 将 lang 替换为路由名称
- python - 如何为不同的产品设置不同的尺寸
- python - 并行化 for 循环的所有迭代
- google-app-engine - asia-south1 区域没有足够的资源来满足请求
- flutter - Flutter 错误:找不到正确的提供程序
- >
- flutter - 当textformfield不为空时颤动如何更改提交按钮颜色?
- flutter - 在flutter中同步gradle文件时接收java.lang.StackOverflowError
- c++11 - Qml : 切换 qml 视图
- ios - 无法在 IOS Swift 中使用委托方法关闭侧边菜单
- swift - 将值设置为缓存图像以崩溃结束