1 import os 2 import time 3 from multiprocessing import Pool,Process,Lock 4 5 def foo(i): 6 time.sleep(1) 7 # print('work is over') 8 print(i) 9 return i+100 10 11 # def fun(): 12 # print(os.getppid()) 13 # print(os.getpid()) 14 15 16 if __name__ == '__main__': 17 pool = Pool(5) 18 for i in range(100): 19 pool.apply(func=foo,args=(i,)) # 同步运行,一个一个的运行 20 # pool.apply_async(func=foo,args=(i,)) # 异步并行 21 22 pool.close() 23 pool.join() 24 print('end') 25 输出:
在进程池里面,pool.close() 必须在pool.join()的前面。
回调函数用的是主进程。比如在写logger()的时候,当子进程结束了之后就可以释放掉子进程,回调主函数进行写
logger()。
逻辑之外的就用回调函数。
穿函数就用return
1 import os 2 import time 3 from multiprocessing import Pool,Process,Lock 4 5 def foo(i): 6 time.sleep(1) 7 # print('work is over') 8 print(i) 9 print('son',os.getpid()) 10 return i+100 11 12 def fun(arg): 13 # print(os.getppid()) 14 # print(os.getpid()) 15 print('hello') 16 print('fun',os.getpid(),arg) 17 18 if __name__ == '__main__': 19 pool = Pool(5) 20 print('parent',os.getpid()) 21 for i in range(100): 22 # pool.apply(func=foo,args=(i,)) # 同步运行,一个一个的运行 23 # pool.apply_async(func=foo,args=(i,)) # 异步并行 24 pool.apply_async(func=foo,args=(i,),callback=fun) 25 pool.close() 26 pool.join() 27 print('end') 28 输出 29 parent 21084 30 0 31 son 25984 32 hello 33 fun 21084 100 34 1 35 son 21628 36 hello 37 fun 21084 101 38 2 39 son 23384 40 hello 41 fun 21084 102