码迷,mamicode.com
首页 > 系统相关 > 详细

进程池 协程 与I/O模型

时间:2019-08-15 22:43:22      阅读:149      评论:0      收藏:0      [点我收藏+]

标签:get   return   同步   open   opened   回调机制   hid   返回结果   import   

一.进程池与线程池

进程池:限制进程创建的数量,使用时直接从进程池,获取空闲进程去执行任务,减少创建和销毁进程带来的时间消耗;如果进程的数量没有达到最大数量,且没有空闲进程去执行      任务,就会再创建一个新的进程,放入进程池去执行任务;如果进程池中的进程数量达到最大数量,没有空闲进程去,这是任务需要等待某个进程成为空闲进程之后,

    再去执行任务。

技术图片
from concurrent.futures import ProcessPoolExecutor

import time
import os

# 池子中创建的进程/线程创建会被保存在进程/线程池中
# 会调用进程/线程池中的进程/线程去执行任务
# 节省了反复开辟进程/线程的资源
pool = ProcessPoolExecutor()  # 默认是当前计算机cpu的个数

def task(n):
    print(n,os.getpid())  # 查看当前进程号
    time.sleep(2)


if __name__ == __main__:

    for i in range(20):
        res = pool.submit(task,i)
View Code

ps:当进程池满后,没有kill进程的情况下,会使用进程池中的进程去执行任务,不会再去创建新的进程。

 

线程池:同进程池概念类似。

技术图片
from concurrent.futures import ThreadPoolExecutor

import time


# 池子中创建的进程/线程创建会被保存在进程/线程池中
# 会调用进程/线程池中的进程/线程去执行任务
# 节省了反复开辟进程/线程的资源
pool = ThreadPoolExecutor(5)  # 括号内可以传参数指定线程池内的线程个数
# 也可以不传  不传默认是当前所在计算机的cpu个数乘5

def task(n):
    print(n)  # 查看当前进程号
    time.sleep(2)


for i in range(20):
    res = pool.submit(task,i)
View Code

 

进程异步:

技术图片
from concurrent.futures import ThreadPoolExecutor,ProcessPoolExecutor
import time
import os


pool = ProcessPoolExecutor()  # 默认是当前计算机cpu的个数

# 池子中创建的进程/线程创建会被保存在进程/线程池中
# 会调用进程/线程池中的进程/线程去执行任务
# 节省了反复开辟进程/线程的资源

def task(n):
    print(n,os.getpid())  # 查看当前进程号
    time.sleep(2)
    return n**2


def call_back(n):
    print(拿到了异步提交任务的返回结果:,n.result())
"""
提交任务的方式
    同步:提交任务之后 原地等待任务的返回结果 期间不做任何事
    异步:提交任务之后 不等待任务的返回结果  通过回调方式获得异步返回值 直接执行下一行代码
"""

"""
异步回调机制:当异步提交的任务有返回结果之后,会自动触发回调函数的执行

"""
if __name__ == __main__:

    t_list = []
    for i in range(20):
        res = pool.submit(task,i).add_done_callback(call_back)  # 提交任务的时候 绑定一个回调函数 一旦该任务有结果 立刻执行对于的回调函数
   
        t_list.append(res)
View Code

 

 

二.协程

协程:

 

三.I/O模型

 

进程池 协程 与I/O模型

标签:get   return   同步   open   opened   回调机制   hid   返回结果   import   

原文地址:https://www.cnblogs.com/Cpsyche/p/11360078.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!