# 进程池 内部维护一个进程序列,当使用时,则去进程池获取一个进程,如果进程池序列没有可供使用的进程,那么程序就等待,直到进程池中有可用进程为止。
# 进程池中有两个方法 apply表示同步方法 apply_async表示异步方法
from multiprocessing import Pool
import time, os
def foo(i):
time.sleep(1)
print(i)
return i + 100
def bar(arg):
print(os.getpid())
print(os.getppid())
print('logger:', arg)
pass
if __name__ == '__main__':
pool = Pool(5) # 创建进程池对象,最大进程数为5,如果不写5,则默认为电脑的实际核心数
print('main process:', os.getpid())
bar(1)
print('-' * 30)
for i in range(100): # 开100个任务
pool.apply_async(func=foo, args=(i,),
callback=bar) # 用进程池里的最大量(5),来跑这100个任务,callback表示回调函数(某个动作或函数执行成功后再去执行的函数)
# pool.apply(func=foo, args=(i,)) # 同步方式,一次只能一个进程,不管你进程池里设置的是多少
pool.close()
pool.join() # 在进程池中join要放在close的后面
print('end')