作者知道python3代码实现多进程的方式主要有三种:fork()函数,muliprocessing模块和进程池
fork()函数
import os
pid = os.fork()
"""
使用fork()创建子进程,会在父进程中返回子进程的pid,在子进程中返回0
"""
if pid < 0:
print('子进程创建失败')
elif pid == 0:
print('这是子进程')
else:
print('这是父进程')
print('进程运行结束')
muliprocessing模块
from multiprocessing import Process
"""
创建子进程:将子进程中需要执行的时间封装为函数,将这个函数传给Process
"""
def func(name,age):
print('{}的年龄是{}'.format(name,age))
p = Process(target=func,kwargs={'name':'testname', 'age':18})
p.start() #子进程开始运行
p.join() #阻塞等待子进程结束,回收子进程
"""
muliprocessing创建多进程
"""
def func(name,age):
print('{}的年龄是{}'.format(name,age))
process_list = []
for i in range(10):
p = Process(target=func,kwargs={'name':'testname', 'age':18})
process_list.append(p)
p.start()
for process_child in process_list:
process_child.join()
进程池创建多个子进程
"""
由于频繁创建和撤销进程消耗资源较大,
所以引进进程池,将各项需求作为事件传入进程池来创建子进程,
当子进程结束后,不会回收子进程,只是终止事件,避免频繁创建和撤销子进程,减少资源消耗
"""
from multiprocessing import Pool
def func_test(num):
print('这是第{}个事件'.format(num))
p = Pool() #创建进程池对象
for i in range(10):
p.apply_async(func=func_test, kwds={'num': i})
p.close() #关闭进程池,事件不能加入进程池中
p.join() #回收进程池