Python装饰器与GIL锁解释

Python 进阶篇-系列文章全篇

🍑 Linux操作系统与常用命令
🍑 Linux系统性能定时监控升级,源码可复制
🍑 tcp网络程序的实现步骤,看这个就够了
🍑 http请求与响应,tcp3次握手&四次挥手
🍑 模拟浏览器实现,服务端基础框架搭建
🍑 Python进阶:利用线程实现多任务
🍑 Python进阶:进程的状态及基本操作
🍑 Python进阶:一文搞懂迭代器、生成器、协程(附案例)
🍑 数据库:了解MySQL数据类型、SQL命令
🍑 从零开始学SQL:where条件查询与连接
🍑 Python网络开发基础,实现udp聊天器小案例
🍑 多任务版TCP服务端程序开发案例+源码
🍑 【图文教程详解】Ubuntu的两种安装方式
🍑 Python中的深拷贝与浅拷贝



1. 在原装饰器上设置外部变量

  • 作用:向装饰器内部传递参数

  • 格式:

    def test(path):
       def function_out(func):
       	  def function_in():
       	     ....
       	  return function_in
       return function_out
    
  • 使用:

    @test(“login.py”)

    1. test(login.py) —> function_out

    2. @ 第一步的结果 ——> @ founction_out

2. 多重装饰器

  • 多重装饰器:给一个函数进行多次装饰
  • 装饰原则:就近原则(靠近待装饰函数的先装饰,随后一层一层装饰)

3. 类装饰器

  • 作用:使用一个类为一个函数装饰

  • 类的书写:

    必须有两个方法

    1. init 方法,必须接收 装饰器传递的参数 func

    2)call方法, self.func()

    # 装饰器类
    class Test(object):
    
        def __init__(self,func):
            print("----init----方法")
            print("---func--", func)
            # func 是login函数的引用
            self.func = func
    
        def run(self):
            print("---正在疯跑---")
    
        def __call__(self, *args, **kwargs):
            print("----开始验证----")
            # 调用原来login的内容
            self.func()
    
  • 格式:@类名

    ​ 待装饰的函数

    @Test

    def login():

    login = Test(login)

    login() —> 调用类的 __call__方法

  • 对象名() 调用对象的 __call__()

4. GIL锁引入

  • 监控资源的竞争情况 htop
  • 资源的消耗的情况
    • 单进程 1核
    • 多进程 多核
    • 多线程 多核但是很低 gil锁的问题

5. GIL概念及影响

  • Gil 全局解释器锁
  • GIL跟python语言没有关系,Python底层解释器Cpython的问题
  • GIL释放的情况
    • 线程执行完毕释放
    • I/O 阻塞的时候释放
    • Python 3.x使用计时器(执行时间达到阈值后,当前线程释放GIL)

6. GIL解决方案

  • 解决方案:
    • 更换解释器 Jpython pypy
    • 用进程替换线程(进程会占用更多的系统资源)
    • 子线程用C语言实现(test.c–>libtest.so–>python加载)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值