当前位置: 首页 > 面试题库 >

如何在Python中进行并行编程?

姜俊民
2023-03-14
问题内容

对于C ++,我们可以使用OpenMP进行并行编程。但是,OpenMP不适用于Python。如果要并行执行python程序的某些部分,该怎么办?

该代码的结构可以认为是:

solve1(A)
solve2(B)

其中solve1solve2是两个独立的功能。为了减少运行时间,如何并行而不是按顺序运行这种代码?代码是:

def solve(Q, G, n):
    i = 0
    tol = 10 ** -4

    while i < 1000:
        inneropt, partition, x = setinner(Q, G, n)
        outeropt = setouter(Q, G, n)

        if (outeropt - inneropt) / (1 + abs(outeropt) + abs(inneropt)) < tol:
            break

        node1 = partition[0]
        node2 = partition[1]

        G = updateGraph(G, node1, node2)

        if i == 999:
            print "Maximum iteration reaches"
    print inneropt

其中setinnersetouter是两个独立的功能。那是我要平行的地方…


问题答案:

您可以使用多处理模块。对于这种情况,我可以使用一个处理池:

from multiprocessing import Pool
pool = Pool()
result1 = pool.apply_async(solve1, [A])    # evaluate "solve1(A)" asynchronously
result2 = pool.apply_async(solve2, [B])    # evaluate "solve2(B)" asynchronously
answer1 = result1.get(timeout=10)
answer2 = result2.get(timeout=10)

这将产生可以为您完成常规工作的流程。由于未通过processes,它将为您计算机上的每个CPU内核生成一个进程。每个CPU内核可以同时执行一个进程。

如果要将列表映射到单个功能,请执行以下操作:

args = [A, B]
results = pool.map(solve1, args)

不要使用线程,因为GIL会锁定对python对象的所有操作。



 类似资料:
  • 其中和是两个独立的函数。那就是我想平行的地方...

  • 问题内容: 我有一个80%分类变量的机器学习分类问题。如果要使用一些分类器进行分类,是否必须使用一种热编码?我可以在没有编码的情况下将数据传递给分类器吗? 我正在尝试进行以下功能选择: 我读了火车文件: 我将类别特征的类型更改为“类别”: 我使用一种热编码: 问题是,尽管我使用的是坚固的机器,但第3部分经常卡住。 因此,没有一种热编码,我就无法进行任何特征选择来确定特征的重要性。 你有什么建议吗?

  • 我有一个80%分类变量的机器学习分类问题。如果我想使用一些分类器进行分类,我必须使用一个热编码吗?我可以不编码地将数据传递给分类器吗? 我试图做以下功能选择: > 我读了火车文件: 我将分类特征的类型更改为“类别”: 我使用一个热编码: 问题是,第三部分经常卡住,尽管我使用的是一个强大的机器。 因此,没有一个热编码,我无法进行任何特征选择,以确定特征的重要性。 你推荐什么?

  • 问题内容: 我有一长行代码,我想在多行中分解。我使用什么,语法是什么? 例如,添加一串字符串, 并分成两行,如下所示: 问题答案: 线路是什么?你可以在下一行中使用参数而不出现任何问题: 否则,你可以执行以下操作: 查看样式指南以获取更多信息。 从示例行中: 要么: 请注意,样式指南指出,最好使用带括号的隐式连续符,但是在这种特殊情况下,仅在表达式周围加上括号可能是错误的方法。

  • 问题内容: 在Python中scp文件的最pythonic方式是什么?我知道的唯一路线是 这是一种骇客,并且在类似Linux的系统之外不起作用,并且需要Pexpect模块的帮助来避免出现密码提示,除非你已经为远程主机设置了无密码的SSH。 我知道Twisted的,但是我希望避免通过低级ssh模块自己实现scp。 我知道,一个支持SSH和SFTP的Python模块;但它不支持SCP。 背景:我正在连

  • 我正在尝试将bash脚本迁移到Python。 bash脚本并行运行多个OS命令,然后在继续之前等待它们完成,即: 命令 我希望使用Python子进程实现同样的目标。这可能吗?如何等待subprocess.call命令完成后再继续?