• 11.12


    1.全局解释器锁GIL:GIL  Global  Interpreter  Lock

      锁就是线程里面那个锁

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

    每个py程序中都必须有解释器参与 解释器其实就是一堆代码
    相当于多个线程要调用同一个解释器代码 共享以为竞争 竞争就要出事
    给解释器加互斥锁

    python 中内存管理依赖于 GC(一段用于回收内存的代码) 也需要一个线程
    除了你自己开的线程 系统还有一些内置线程 就算你的代码不会去竞争解释器 内置线程也可能会竞争
    所以必须加上锁

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

    2. GIL 和 自定义互斥锁的区别
       全局锁不能保证自己开启的线程安全 但是保证解释器中的数据的安全的
       GIL 在线程调用解释器时 自动加锁 在IO阻塞时或线程代码执行完毕时 自动解锁

    3.进程池

      本质上是一个容器,当进程很多是方便管理,很多时候进程是空闲的 就让他进入进程池  让有任务处理时才从进程池取出来使用。

      进程池使用
    ProcessPoolExecutor类
    创建时指定最大进程数 自动创建进程
    调用submit函数将任务提交到进程池中
    创建进程是在调用submit后发生的

      进程池可以自动创建进程
      进程限制最大进程数
      自动选择一个空闲的进程帮你处理任务

    代码执行完算是空闲

    IO密集时 用线程池
    计算密集时 用进程池

  • 相关阅读:
    python ddt数据驱动框架
    yarn的安装和使用【转】
    辅助色选取思路
    echarts y轴起始坐标值设置
    mapbox 图层视角设置
    vue-cli2使用store存储全局变量
    vue 数组不响应解决办法
    echarts之dataZoom配置项【转】
    Vue中使用地图平台MapboxGL【转载】
    快速入门MapboxGL【转载】
  • 原文地址:https://www.cnblogs.com/zhanggq/p/9948377.html
Copyright © 2020-2023  润新知