进程池

 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
原文地址:https://www.cnblogs.com/ch2020/p/12760266.html