Python 多进程(1)

多进程池

  • 在apply 中,每个进程顺序执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from multiprocessing import Pool
import os,time
mylist = [1,2,3]
def f0():
for i in mylist:
print('执行进程{}'.format(os.getpid()))
time.sleep(2)
print(i)
if __name__ == '__main__':
pool = Pool(2)#创建包含2个进程的进程池
for i in range(2):#每次进入循环后,向进程池中申请一个进程
pool.apply(f0)#apply里面每个进程执行完毕后才执行下一个进程,这个语句相当于直接调用f0()
pool.close()#执行完close后不会有新的进程加入到pool,join函数等待所有子进程结束
pool.join()#等待进程运行完毕,先调用close函数,否则会出错

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
执行进程7124
1
执行进程7124
2
执行进程7124
3
执行进程13284
1
执行进程13284
2
执行进程13284
3
  • 在 apply_async 中,各个进程异步执行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
from multiprocessing import Pool
import os,time
mylist = [1,2,3]
def f0():
for i in mylist:
print('执行进程{}'.format(os.getpid()))
time.sleep(2)
print(i)
if __name__ == '__main__':
pool = Pool(2)#创建包含2个进程的进程池
for i in range(2):#每次进入循环后,向进程池中申请一个进程
pool.apply_async(f0)#异步执行
pool.close()
pool.join()

运行结果:

1
2
3
4
5
6
7
8
9
10
11
12
执行进程11860
执行进程4552
1
执行进程11860
1
执行进程4552
2
执行进程11860
2
执行进程4552
3
3

两个方法的区别:

p.apply() 每个任务顺序执行; p.apply_async() 每一个任务都并发执行。

赞赏是对作者最大的支持!
0%