进程池
# 进程池 内部维护一个进程序列,当使用时,则去进程池获取一个进程,如果进程池序列没有可供使用的进程,那么程序就等待,直到进程池中有可用进程为止。 # 进程池中有两个方法 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')