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”)
-
test(login.py) —> function_out
-
@ 第一步的结果 ——> @ founction_out
-
2. 多重装饰器
- 多重装饰器:给一个函数进行多次装饰
- 装饰原则:就近原则(靠近待装饰函数的先装饰,随后一层一层装饰)
3. 类装饰器
-
作用:使用一个类为一个函数装饰
-
类的书写:
必须有两个方法
- 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锁解释的主要内容,如果未能解决你的问题,请参考以下文章