# -*- coding:utf-8 -*- from multiprocessing import Pool import os, time, random def worker(msg): t_start = time.time() print("%s开始执行,进程号为%d" % (msg,os.getpid())) random.random() # 随机生成0~1之间的浮点数 time.sleep(1/msg) t_stop = time.time() print(msg,"执行完毕,耗时%0.2f" % (t_stop-t_start)) def main(): po = Pool(3) # 定义一个进程池,最大进程数3 for i in range(0,10): # Pool().apply_async(要调用的目标,(传递给目标的参数元组,)) # 每次循环将会用空闲出来的子进程去调用目标 po.apply_async(worker,(i,)) print(i) print("----start----") po.close() # 关闭进程池,关闭后po不再接收新的请求 po.join() # 等待po中所有子进程执行完成,必须放在close语句之后 print("-----end-----") if __name__ == "__main__": main()
上面通过mian() 函数创建了10个进程,同时在本地申请了最大的进程池个数是3个,也就是说,每次最多可以跑3个进程,只有其中的某一个进程结束了,才会开启下一个进程。并且是运行中的进程,谁先结束,那么下一个排队的进程就会自动占用该进程号。
做一个比喻,假设每次有3个银行柜台人员,一共来了10个用户来办事,每个人来办事之前必须得取一个号码,那么最开始就是可以直接先服务3个用户,根据用户办理业务的复杂度,必然会存在快慢之间的关系,办理业户快的用户,自然会先走,那么下一个用户按牌号顺序替补上刚刚的空开的位置,直到10个用户全部办理完用户。这个就可以简单理解一下上述的进程的过程。(注:但是这个地方必须所有用户要先取号才行,取完以后才能办理业务。)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)