JIR、进程池和线程池

news/2024/7/20 13:48:56 标签: python, 内存管理

  今天学习了JIR、进程池和线程池

  GIL:Global Interpreter Lock

  全局解释器锁

    锁的作用:为了避免资源竞争造成数据错乱

  python程序的执行过程

    1.启动解释器进程 python.exe

    2.解析你的py文件并执行它

  每个py程序中殴斗必须有解释器参与 解释器其实就是一堆代码

  相当于多个线程要调用同一个解释器代码 共享意味着竞争 竞争就要出事

  给解释器加互斥锁

  

  python内存管理依赖于 GC(一段用于回收内存的代码) 也需要一个线程

  除了你自己开的线程 系统还有一些内置线程 就算你的代码不会去竞争解释器 内置线程也可能会竞争

  所以必须加上锁

  当一个线程遇到了I/O 同时解释器也会自动解锁 去执行其他线程 cpu会切换到其他程序

  解释器加锁以后

    将导致所有线程只能并发 不能达到真正的并行 意味着同一时间只有一个CPU在处理你的线程给你的感觉是效率低

  代码执行有两种状态

  阻塞 i/o 失去CPU的执行权 (CPU等待IO完成)

  非阻塞  代码正常执行 比如循环一千万次  中途CPU可能切换 很快会回来  (CPU在计算)

  假如有32核CPU 要处理一个下载任务  网络速度慢 只有100kb/s 文件大小为1024kb

  如果你的代码中IO操作非常多  cpu性能不能直接决定你的任务处理速度

  在IO密集的程序中 CPU性能无法直接决定程序的执行速度   python就应该干这种活儿

  在计算密集的程序中 CPU性能可以直接决定程序的执行速度

   

  计算密集测试                                                                                                                                                                        

from multiprocessing import Process
import time

#计算密集任务
def task1():
    sum = 1
    for i in range(10000000):
        sum *=i

def task2():
    sum = 1
    for i in range(10000000):
        sum *=i

def task3():
    sum = 1
    for i in range(10000000):
        sum *=i

def task4():
    sum = 1
    for i in range(10000000):
        sum *=i

def task5():
    sum = 1
    for i in range(10000000):
        sum *=i

def task6():
    sum = 1
    for i in range(10000000):
        sum *=i

if __name__ == '__init__':
    # 开始时间
    st_time = time.time()
    # 多进程情况下
    p1 = Process(target = task1)
    p2 = Process(target = task2)
    p3 = Process(target = task3)
    p4 = Process(target = task4)
    p5 = Process(target = task5)
    p6 = Process(target = task6)
    p1.start()
    p2.start()
    p3.start()
    p4.start()
    p5.start()
    p6.start()

    p1.join()
    p2.join()      
    p3.join()
    p4.join()
    p5.join()
    p6.join()
    print(time.time()-st_time)    
 '''
1.05321354643464
'''

 

 

  IO密集测试

  

from threading import Thread
import time

#计算密集任务
def task1():
    time.sleep(3)

def task2():
    time.sleep(3)

def task3():
    time.sleep(3)

def task4():
    time.sleep(3)

def task5():
    time.sleep(3)

def task6():
    time.sleep(3)

if __name__ == '__main__':
    #开始时间
    st_time = time.time()
    #多线程情况下
    t1 = Thread(target = task1)  
    t2 = Thread(target = task2)
    t3 = Thread(target = task3)
    t4 = Thread(target = task4)
    t5 = Thread(target = task5)
    t6 = Thread(target = task6)
    t1.start()
    t2.start()
    t3.start()
    t4.start()
    t5.start()
    t6.start()
    t1.join()
    t2.join()
    t3.join()
    t4.join()
    t5.join()
    t6.join()
    print(time.time - st_time)
    '''
    3.0035946873164
    '''

  二、进程池

  进程池就是一个装进程的容器

  为什么出现

    当进程很多的时候方便管理进程

  什么时候用?

    当并发量特别大的时候    例如双十一

    很多时候进程是空闲的  就让他进入进程池   让有任务处理时才从进程池取出来使用

  进程池使用

    ProcessPoolExecutor类

    创建时指定最大进程数  自动创建进程

    调用submit函数将任务提交到进程池中

    创建进程是在调用submit后发生的

  总结一下:

    进程池可以自动创建进程

    进程限制最大进程数

    自动选择一个空闲的进程帮你处理任务

  三、线程池

  和进程池差不多,使用的是ThreadPoolExcecutor类

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           

 

转载于:https://www.cnblogs.com/xiaocaiyang/p/9947840.html


http://www.niftyadmin.cn/n/659501.html

相关文章

【小5聊】Win10安装Mysql数据库绿色版配置

在windows系统下安装mysql数据库,绿色版,版本-mysql-5.7.29-winx64 1、 绿色版下载地址 mysql已经属于Oracle旗下,选择社区版本 2、解压文件到C盘 3、安装服务 管理员运行cmd,定位到bin文件夹下,并安装 拒绝安装&am…

idea安装完打不开(之前有过破解更改vmoptions)解决办法

由于之前想要破解idea,白嫖嘛,后来发现软件安装管家公众号的破解方法由于修改了host文件导致我无法安装进入plugin markets安装plugin, 于是更换破解方法,大致步骤是先试用,(Help >Edit Custom VM Opti…

Anaconda3.6 安装PyQt5、PyQt5-tool后在Pycharm中设置tool时候找不到designer.exe解决办法

(这篇文章主要目的是提醒一下—— 找不到的话卸载试试看~) 在这个界面死活找不到designer.exe 于是准备卸载重装,在这时发现了这玩意在哪!!! 真是一言难尽!!(C:\Users\Ryan\AppData\Roaming\Py…

梦断代码读书笔记

梦断代码,Dreaming in Code, 是作者讲述软件开发路上一系列的坎坷与经验之谈。 第0章 软件时间 从0开始的技术方式,自然也就讲了计算机从0开始的原因。1,-1正是我们对计算机所作的操作。 "Hello World " 程序能够唤醒每…

【小5聊】记录一次.Net开发工程师面试题(1)

对于正在找工作的同学们,面试时,除了填写基本信息外,一般还会让做一份和专业相关的面试题 目录 1、什么是委托,委托是不是事件 2、重载和重写异同 3、依赖注入生命周期 4、 输出以下代码执行的值 5、查询每组活动前3名学生 1、…

python实现图片旋转

随手写的,博客留存 import PIL.Image as img import ospath_old "E:/processpng/" #老目录 path_new "E:/MyCodes/mailClient/img/" #新目录def process(dirname):for maindir, subdir, file_name_list in os.walk(dirname…

【小5聊】C#基础之实例化和静态类对象调用对比

在编程时,什么时候用实例化对象,什么时候用静态类对象,这个值得我们思考 它们之间所占的内存和生命周期又是如何,框架本身的回收机制是什么 1、对比效果 总结: 实例化对象不断调用多少次,都会重新初始化值…

python获得某html页面所有图片链接,并按照链接中的图片名保存本地

python获得某html页面(以豆瓣为例)所有图片链接,并按照链接中的图片名保存本地(D:/test/) 主要涉及正则和request的请求,代码不是特别复杂,仅供自己记录留存 import urllib.request # 导入用…