Python装饰器与GIL锁解释

Posted 黑马程序员官方

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python装饰器与GIL锁解释相关的知识,希望对你有一定的参考价值。

系列文章目录

Python进阶:利用线程实现多任务
Python进阶:进程的状态及基本操作
Python进阶:一文搞懂迭代器、生成器、协程(附案例)
数据库:了解MySQL数据类型、SQL命令
从零开始学SQL:where条件查询与连接
Python网络开发基础,实现udp聊天器小案例
更多内容更新中……


文章目录


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加载)

以上是关于Python装饰器与GIL锁解释的主要内容,如果未能解决你的问题,请参考以下文章

Python 36 GIL全局解释器锁

什么是python的全局解释锁(GIL)

深入理解Python中的GIL(全局解释器锁)

GIL全局解释器锁

python高性能编程--002--全局解释器锁GIL

Python 之 GIL 全局解释器锁