python web04-07-进程池
from multiprocessing import Pool
import os, time, random
def worker(msg):
t_start = time.time()
print("%s开始执行,进程号为%d" % (msg,os.getpid()))
random.random()
time.sleep(1/msg)
t_stop = time.time()
print(msg,"执行完毕,耗时%0.2f" % (t_stop-t_start))
def main():
po = Pool(3)
for i in range(0,10):
po.apply_async(worker,(i,))
print(i)
print("----start----")
po.close()
po.join()
print("-----end-----")
if __name__ == "__main__":
main()
上面通过mian() 函数创建了10个进程,同时在本地申请了最大的进程池个数是3个,也就是说,每次最多可以跑3个进程,只有其中的某一个进程结束了,才会开启下一个进程。并且是运行中的进程,谁先结束,那么下一个排队的进程就会自动占用该进程号。
做一个比喻,假设每次有3个银行柜台人员,一共来了10个用户来办事,每个人来办事之前必须得取一个号码,那么最开始就是可以直接先服务3个用户,根据用户办理业务的复杂度,必然会存在快慢之间的关系,办理业户快的用户,自然会先走,那么下一个用户按牌号顺序替补上刚刚的空开的位置,直到10个用户全部办理完用户。这个就可以简单理解一下上述的进程的过程。(注:但是这个地方必须所有用户要先取号才行,取完以后才能办理业务。)
|