#encoding = utf-8
#进程池类似线程中的信号量(像银行排队叫号一样),进程池内部维护一个进程序列,当使用时则在进程池中获取一个。
#获取时,如果没有可用进程,程序需要等待,知道有可用进程。
#进程池中有两种,一种叫apply(并行执行),一种叫apply_async(串行执行)
#本代码主要包含三部分:主进程、子进程(sub_process)、回调函数(call_back)
from multiprocessing import Process,Pool,freeze_support
import os,time
#子进程
def sub_process(i):
time.sleep(2)
print(“in process”,os.getpid())
return i+1
#回调函数
def call_back(arg):
#连接数据库
print(“程序执行完毕”,os.getpid())
#主进程
if name == “main”:
print(“主进程”,os.getpid())
#声明进程池中允许同时放入5个子进程
pool = Pool(5)
for i in range(10):
pool.apply_async(func=sub_process,args=(i,),callback = call_back)
print("主进程结束")
pool.close()
#进程池中写一次join就可以了,pool中包含所有进程
pool.join()
#注意事项:使用windowPC启动多进程,需要导入freeze_support,linux不需要
#进程池中一定先pool.close(),再pool.join()