使用情况
当需要的进程不多时,可以使用multiprocessing 中的process动态生成多个进程,
如果需要的进程数量过于庞大,则使用 multiprocessing 中提供的 pool 方法。
初始化进程池时。可以指定一个最大进程值,当有新的进程请求被提交时,如果进程池还没有满,则会创建一个新的进程池执行该请求,但如果进程池中的进程已达到最大值,则该请求加入等待队列,当有进程被执行结束时,从等待队列被分配。
代码实现
- windows 和 Linux 平台代码略有不同
windows
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from multiprocessing import Pool
import os
import time
import random
def worker(msg):
t_start = time.time()
print("%s 开始执行,进程号为 %d" % (msg,os.getpid()))
# 随机生成0--1之间的浮点数
time.sleep(random.random()*2)
t_stop = time.time()
print(msg,"执行完毕,耗时%0.2f" % (t_stop-t_start))
if __name__ == '__main__':
po = Pool(3)
for i in range(0,10):
po.apply_async(worker,(i,))
print("----start----")
po.close()
po.join()
print("----end----")
Linux
#!/usr/bin/env python
# -*- coding:utf-8 -*-
from multiprocessing import Pool
import os
import time
import random
def worker(msg):
t_start = time.time()
print("%s 开始执行,进程号为 %d" % (msg,os.getpid()))
# 随机生成0--1之间的浮点数
time.sleep(random.random()*2)
t_stop = time.time()
print(msg,"执行完毕,耗时%0.2f" % (t_stop-t_start))
po = Pool(3)
for i in range(0,10):
po.apply_async(worker,(i,))
print("----start----")
po.close()
po.join()
print("----end----")
运行截图
未完待续。。。