多进程–multiprocessing
multiprocessing
是一个支持使用与 threading
模块类似的 API 来产生进程的包。 multiprocessing
包同时提供了本地和远程并发操作,通过使用
子进程而非线程有效地绕过了 全局解释器锁。 因此,multiprocessing
模块允许程序员充分利用给定机器上的多个处理器。 它在 Unix
和 Windows
上均可运行。
multiprocessing
模块还引入了在 threading
模块中没有的API
。一个主要的例子就是 Pool
对象,它提供了一种快捷的方法,赋予函数并行化处理一系
列输入值的能力,可以将输入数据分配给不同进程处理(数据并行)。
import time
from multiprocessing import Process
import os
print(f"主进程开始:{round(time.time(), 3)}")
print(f"主进程ID:{os.getpid()}")
def handler(x):
print(f"当前时间:{round(time.time(), 3)}")
print(f"当前子进程ID:{os.getpid()}")
print(f"当前子进程父进程ID:{os.getppid()}")
time.sleep(2)
print(x * x)
p = Process(target=handler, args=(5,))
p1 = Process(target=handler, args=(6,))
p2 = Process(target=handler, args=(7,))
p3 = Process(target=handler, args=(8,))
p.start()
p1.start()
p2.start()
p3.start()
print(f"主进程结束:{round(time.time(), 3)}")
执行结果:
主进程开始:1598431859.241
主进程ID:79189
当前时间:1598431859.246
当前子进程ID:79190
当前子进程父进程ID:79189
主进程结束:1598431859.246
当前时间:1598431859.246
当前子进程ID:79191
当前子进程父进程ID:79189
当前时间:1598431859.247
当前子进程ID:79192
当前子进程父进程ID:79189
当前时间:1598431859.248
当前子进程ID:79193
当前子进程父进程ID:79189
25
36
49
64