python web04-07-进程池

python web04-07-进程池,第1张

python web04-07-进程池 python web04-07-进程池
# -*- 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个用户全部办理完用户。这个就可以简单理解一下上述的进程的过程。(注:但是这个地方必须所有用户要先取号才行,取完以后才能办理业务。)

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5712039.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-18

发表评论

登录后才能评论

评论列表(0条)

保存