多进程之进程池
import os
import time
from multiprocessing import Pool
def sub_process(name, age, *args, **kwargs):
for _ in range(2):
print(f'子进程开始运行, pid为: {os.getpid()}')
print(f"我是{name}, 今年{age}")
print(f'args: {args}, kwargs: {kwargs}')
print(f'父进程的pid是: {os.getppid()}')
print()
time.sleep(1)
def main():
print(f'主进程开始运行, pid为: {os.getpid()}')
# 创建进程池,最大进程数量等于两倍的CPU核数
pool = Pool(os.cpu_count() * 2)
for _ in range(2):
# 使用进程池调用子进程
pool.apply_async(sub_process, ('king', 18, 'balabala...', 'makabaka...'), {'key': 'value'})
# 关闭进程池,之后不再接收新的请求
pool.close()
# 必须先pool.close()之后才能使用pool.join()
pool.join()
print('主进程运行完毕')
if __name__ == '__main__':
main()
输出:
主进程开始运行, pid为: 80054
子进程开始运行, pid为: 80058
我是king, 今年18
args: ('balabala...', 'makabaka...'), kwargs: {'key': 'value'}
父进程的pid是: 80054
子进程开始运行, pid为: 80059
我是king, 今年18
args: ('balabala...', 'makabaka...'), kwargs: {'key': 'value'}
父进程的pid是: 80054
子进程开始运行, pid为: 80058
我是king, 今年18
args: ('balabala...', 'makabaka...'), kwargs: {'key': 'value'}
父进程的pid是: 80054
子进程开始运行, pid为: 80059
我是king, 今年18
args: ('balabala...', 'makabaka...'), kwargs: {'key': 'value'}
父进程的pid是: 80054
主进程运行完毕