迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Python >

Python 中的并行 for 循环

作者:迹忆客 最近更新:2023/12/17 浏览次数:

并行化循环意味着使用多个内核并行扩展所有进程。当我们有大量作业时,每个计算都不会等待并行处理中的前一个计算完成。相反,它使用不同的处理器来完成。

在本文中,我们将在 Python 中并行化 for 循环。


在 Python 中使用 multiprocessing 模块并行化 for 循环

为了并行化循环,我们可以使用 Python 中的 multiprocessing 包,因为它支持根据另一个正在进行的进程的请求创建子进程。

可以使用 multiprocessing 模块代替 for 循环来对可迭代对象的每个元素执行操作。可以使用 multiprocessing.pool() 对象,因为在 Python 中使用多线程不会因为全局解释器锁而给出更好的结果。

例如,

import multiprocessing


def sumall(value):
    return sum(range(1, value + 1))


pool_obj = multiprocessing.Pool()

answer = pool_obj.map(sumall, range(0, 5))
print(answer)

输出:

0, 1, 3, 6, 10

在 Python 中使用 joblib 模块并行化 for 循环

joblib 模块使用多处理来运行多个 CPU 内核来执行 for 循环的并行化。它提供了一个轻量级的管道,可以记住模式以进行简单直接的并行计算。

要执行并行处理,我们必须设置作业数,而作业数受限于 CPU 中的内核数或当前可用或空闲的内核数。

delayed() 函数允许我们告诉 Python 在一段时间后调用特定的提到的方法。

Parallel() 函数创建一个具有指定内核的并行实例(在本例中为 2)。

我们需要为代码的执行创建一个列表。然后将列表传递给并行,并行开发两个线程并将任务列表分发给它们。

请参考下面的代码。

from joblib import Parallel, delayed
import math


def sqrt_func(i, j):
    time.sleep(1)
    return math.sqrt(i ** j)


Parallel(n_jobs=2)(delayed(sqrt_func)(i, j) for i in range(5) for j in range(2))

输出:

[1.0,
 0.0,
 1.0,
 1.0,
 1.0,
 1.4142135623730951,
 1.0,
 1.7320508075688772,
 1.0,
 2.0]

在 Python 中使用 asyncio 模块并行化 for 循环

asyncio 模块是单线程的,通过使用 yield fromawait 方法暂时挂起协程来运行事件循环。

下面的代码会在被调用时并行执行,而不会影响要等待的主函数。该循环还与主函数并行运行。

import asyncio
import time


def background(f):
    def wrapped(*args, **kwargs):
        return asyncio.get_event_loop().run_in_executor(None, f, *args, **kwargs)

    return wrapped


@background
def your_function(argument):
    time.sleep(2)
    print("function finished for " + str(argument))


for i in range(10):
    your_function(i)


print("loop finished")

输出:

ended execution for 4
ended execution for 8
ended execution for 0
ended execution for 3
ended execution for 6
ended execution for 2
ended execution for 5
ended execution for 7
ended execution for 9
ended execution for 1

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Python 中导入 OpenSSL

发布时间:2023/12/20 浏览次数:147 分类:Python

本教程演示了如何在 Python 中使用 OpenSSL。我们旨在学习如何在 Python 中使用 OpenSSL。安装 OpenSSL Python 库

在 Python 中是否存在 goto 语句

发布时间:2023/12/20 浏览次数:148 分类:Python

本文为你提供了 Python 中是否存在 goto 语句的答案。本文为你提供了 Python 中是否存在 goto 语句的答案。基本上,Python 不支持 goto 语句。

如何在 Python 中查找列表中的最大值

发布时间:2023/12/18 浏览次数:192 分类:Python

它演示了如何在 Python 中寻找列表中的最大值。本教程将涵盖一些场景和数据类型,从简单的整数列表到更复杂的结构,如数组中的数组。

用 Python 将两个列表转换为字典

发布时间:2023/12/18 浏览次数:91 分类:Python

它演示了如何在 Python 中把列表转换成字典。本教程将介绍如何在 Python 中把两个列表转换为字典,其中一个列表包含字典的键,另一个包含值。

在 Python 中查找列表中的字符串

发布时间:2023/12/18 浏览次数:110 分类:Python

本教程演示了如何在 Python 中查找具有特定子字符串的元素。我们将使用下面的列表并提取其中有 ack 的字符串。my_list = ["Jack", "Mack", "Jay", "Mark"]

用 Python 将两个列表相乘

发布时间:2023/12/18 浏览次数:138 分类:Python

本教程演示了如何在 Python 中对两个列表进行乘法。本教程将演示在 Python 中执行两个列表元素相乘的各种方法。

用 Python 查找列表中元素的所有索引

发布时间:2023/12/18 浏览次数:89 分类:Python

本教程演示了如何在 Python 中查找列表中某个元素的所有出现位置的索引在 Python 中,列表用于在一个名称下存储多个元素。每个元素可以通过它在列表中的位置来访问。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便