背景
软件开发过程中,有时会需要程序同时处理多个任务,又或者需要程序处理的某一个任务各个部分不相互排队;
这时,我们会使用多线程、多进程等方式,让程序进行并行计算;
python 提供了 multiprocessing 库用于支持多进程编程;同时这也是 Python 官方推荐的多线程替代方案;
简介
multiprocessing 是 Python 的一个标准库,它提供了创建和管理进程的功能,使得开发者能够利用多核处理器进行并行计算。
使用 multiprocessing 可以使得 Python 程序在多核或多处理器机器上更加高效地运行。
进程创建:使用 Process 类来创建进程。
进程池Pool:提供了一个简单的接口来处理多个进程的并行执行,特别是用于迭代任务,如 map 和 apply_async。
进程间通信:支持进程间的通信,如管道(Pipe)、队列(Queue)和共享内存。
共享状态:虽然进程通常不共享状态,但 multiprocessing 提供了一些方式来共享状态,如 Value 和 Array。
同步:提供锁(Lock)和信号量(Semaphore)等同步机制,用于控制对共享资源的访问。
进程创建
multiprocessing.Process 类用于创建新的进程对象;
可以通过将函数作为参数传递给 Process 对象来创建新的进程;
import multiprocessing as mp
def func_execute():
print(" execute ")
if __name__ == "__main__":
process = mp.Process(target=func_execute)
process.start()
process.join()
start()
方法用于启动子进程; join()
方法用于等待进程执行完毕;
通过在主程序中调用 join()
,可以让主程序等待子进程的结束,确保主程序在子进程完成后回收其资源。
进程池Pool
multiprocessing.Pool 类用于创建进程池,从而简化子进程的管理和任务分发。
可以通过 map()
和apply()
等方法将任务分发给进程池中的子进程执行。
import multiprocessing as mp
def func_execute(num):
data_list = [1, 2, 3, 4, 5, 6, 7, 8, 9]
for i in data_list:
if i % num == 0:
print(num, "进程打印对应值", i)
if __name__ == '__main__':
pool = mp.