python - 使用嵌套循环在 Python 中进行并行处理
问题描述
由于性能问题,我想在 python 中并行运行我的函数:
import multiprocessing as mp
source_nodes = [10413173, 10414530, 10414530, 10437199]
sink_nodes = [10420346, 10438770, 10438711, 10414530, 10436258]
path =[]
def createpath(source,sink):
for i in source:
for j in sink:
path = path + list(nx.all_simple_paths(Directed_G,i,j))
return path
据我了解,我必须给出 1 个可迭代的应用函数。但我的想法是做类似的事情:
results = [pool.apply(createpath, args=(source_nodes, sink_nodes))]
然后不要给 applyfunction 任何可迭代的对象,我设法让它工作,但我不认为它是并行运行的。
你认为我应该在第一个循环中包含应用函数吗?
解决方案
from multiprocessing import Pool
source_nodes = [1,2,3,4,5,6]
sink_nodes = [1,1,1,1,1,1,1,1,1]
def sum_values(parameter_tuple):
source,sink, start, stop = parameter_tuple
out = 0
for i in range(start, stop):
val_i = source[i]
for j in sink:
out += val_i*j
return out
if __name__ == "__main__":
params = (source_nodes, sink_nodes, 0, 6)
print(sum_values(params))
with Pool(2) as p:
print(p.map(sum_values, [
(source_nodes, sink_nodes, 0, 3),
(source_nodes, sink_nodes, 3, 6),
]))
你可以尝试运行这个。这与 2 个线程池上的映射模式并行运行。在这种情况下,您的输出结果是池中每个进程的结果之和。
推荐阅读
- python - Python。熊猫。合并
- javascript - 如果状态重新渲染后语句总是导致错误条件,则做出反应
- django - 在搜索中获取上传的直接 URL - Wagtail
- laravel - Laravel 全局记录验证异常
- html - 浏览器在构建 CSS 网格时是否会出现明显的舍入错误?
- r - R:理解图
- javascript - 如何显示异步函数的结果
- node.js - 如果不在本地主机上,passport.js(github 策略)将停止传递用户以登录/成功
- javascript - 如何检查 webm icecast 流是否处于活动状态?
- javascript - 我怎样才能做到这一点?添加无效的输入选项