栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

python web04-07-进程池

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/715397.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号