编辑
2024-07-03
👨‍🎓 无限进步
00
请注意,本文编写于 351 天前,最后修改于 225 天前,其中某些信息可能已经过时。

目录

1. What Are Python Porcesses
2. What is a Process pool
3. Multiprocessing Pools in Python

1. What Are Python Porcesses

每个Python程序都是一个进程,并且有一个称为主线程的线程用于执行程序指令。每个进程实际上是Python解释器的一个实例,用于执行Python指令(Python字节码),这比您在Python程序中键入的代码略低级。

有时候,我们可能需要创建新的进程来并发运行额外的任务。

Python通过multiprocessing模块中的Process类提供了真正的系统级进程。

底层操作系统控制着如何创建新进程。在某些系统上,可能需要生成一个新进程,而在其他系统上,则可能需要进行分叉。Python中用于创建新进程的操作系统特定方法并不是我们需要担心的事情,因为它由您安装的Python解释器管理。

python
# SuperFastPython.com # example of running a function in a new process from multiprocessing import Process # a task to execute in another process def task(): print('This is another process', flush=True) # entry point for the program if __name__ == '__main__': # define a task to run in a new process p = Process(target=task) # start the task in a new process p.start() # wait for the task to complete p.join()

这对于在单独的进程中运行临时的一次性任务很有用,尽管当您有许多任务需要运行时,这种方法会变得笨重。

每个创建的进程都需要分配资源(例如Python解释器的一个实例和进程主线程的堆栈空间)。如果我们为临时任务反复创建和销毁许多进程,那么设置进程的计算成本可能会变得昂贵。

相反,如果我们期望在程序中执行许多临时任务,我们更希望保留工作进程以供重复使用。

这可以通过使用进程池来实现。

2. What is a Process pool

进程池是一种自动管理一组工作进程的编程模式。

该池负责一定数量的进程。

它控制进程的创建时间,例如在需要时创建进程。

它还控制进程在闲置时的行为,例如使它们等待而不消耗计算资源。

进程池可以提供一个通用的接口,用于执行具有可变数量参数的临时任务,类似于进程对象的目标属性,但不要求我们选择要运行任务的进程、启动进程或等待任务完成。

Python通过 multiprocessing.Pool 类提供了进程池。

3. Multiprocessing Pools in Python

multiprocessing.pool.Pool 类在Python中提供了一个进程池。

multiprocessing.pool.Pool 类也可以通过别名 multiprocessing.Pool 访问,它们可以互换使用。

它允许将任务作为函数提交到进程池中并发执行。

要使用进程池,我们首先必须创建并配置该类的一个实例。

例如:

python
# 创建一个进程池 pool = multiprocessing.pool.Pool(...)

一旦配置完成,可以使用 apply()map() 的阻塞和异步版本将任务提交给进程池执行。

例如:

python
# 发出任务以执行 results = pool.map(task, items)

完成进程池的使用后,可以关闭它并释放进程池使用的资源。

例如:

python
# 关闭进程池 pool.close()

现在我们对Python进程池有了一个高层次的理解,让我们看一下 multiprocessing.pool.Pool 类的生命周期。

本文作者:Eric

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!