在 Python 中执行并行处理

Najwa Riyaz 2023年1月30日
  1. 在 Python 中使用处理池及其方法执行多处理
  2. 在 Python 中使用 apply_async() 函数执行多处理
  3. 在 Python 中使用 map()map_sync() 函数执行多处理
在 Python 中执行并行处理

本文介绍了如何在 Python 中并行执行多个进程。

在 Python 中使用处理池及其方法执行多处理

要在 Python 中执行多处理,请执行以下步骤。

  • 首先,导入 multiprocessing 模块。
  • 使用 Pool 类来定义 Python 处理池。这个池代表一个工作进程池。以下面的代码片段为例。
Pool(processes=n)

因此,Pool 类将允许同时运行 n 个进程。此类包含启用将任务委派给池的工作进程的方法。

以下是 Pool 类的一些方法。

  • Pool.map() - 使用池的这个阻塞方法阻塞直到结果准备好。此方法将关联的一个可迭代对象分成几个块。然后,它将块作为单独的任务提交给进程池。

  • 使用以下 Pool 类的非阻塞方法同时提交进程。使用 get() 方法获取函数的结果。

  • Pool.apply_async()

  • Pool.map_async()

要确定你的机器可以为多处理处理的进程数,你应该知道你设备中的处理器数;你可以使用以下代码进行检查。

import multiprocessing as mp

print("Number of processors: ", mp.cpu_count())

输出:

Number of processors:  4

在 Python 中使用 apply_async() 函数执行多处理

这是一个示例,演示了使用 Python 中的处理池进行多处理,同时确定 0-9 数字范围的平方。

注意这里,我们甚至打印了 Process worker 的名字,这是可选的。

from multiprocessing import Pool
from multiprocessing import Process, current_process
import time
from time import sleep
import random


def fnc_square(x):
    print(current_process().name)
    return x * x


if __name__ == "__main__":
    pool = Pool(processes=4)
    result = pool.apply_async(fnc_square, [6])
    print(result.get(timeout=1))
    print(pool.map(fnc_square, range(10)))

输出:

SpawnPoolWorker-1
36
SpawnPoolWorker-2
SpawnPoolWorker-1
SpawnPoolWorker-2
SpawnPoolWorker-1
SpawnPoolWorker-2
SpawnPoolWorker-1
SpawnPoolWorker-2
SpawnPoolWorker-1
SpawnPoolWorker-2
SpawnPoolWorker-1
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

在 Python 中使用 map()map_sync() 函数执行多处理

map_async 函数是非阻塞的,而 map 函数是阻塞的。下面的示例演示了这两个命令之间的区别。

from multiprocessing import Pool
import time


def f(x):
    print(x * x)


if __name__ == "__main__":
    pool = Pool(processes=1)
    pool.map(f, range(10))
    r = pool.map_async(f, range(10))
    print("First print")
    print("Second print")
    r.wait()
    print("Third print")

在这里,我们可以观察到 pool.map() 函数将等待 10 次操作调用完成。因此,我们看到按顺序打印的结果。

此外,pool.map_async() 将异步执行 10 个函数调用。当 r.wait() 函数被调用时,它会阻止处理器执行。因此,在输出中,我们看到打印消息为 First printSecond print,但 Third print 总是在最后。

输出:

0
1
4
9
16
25
36
49
64
81
First print
Second print
0
1
4
9
16
25
36
49
64
81
Third print

相关文章 - Python Process