Python 进阶篇-系列文章全篇
🍑 Linux操作系统与常用命令 🍑 Linux系统性能定时监控升级,源码可复制
🍑 tcp网络程序的实现步骤,看这个就够了
🍑 http请求与响应,tcp3次握手&四次挥手
🍑 模拟浏览器实现,服务端基础框架搭建
🍑 Python进阶:利用线程实现多任务
🍑 Python进阶:进程的状态及基本操作
🍑 Python进阶:一文搞懂迭代器、生成器、协程(附案例)
🍑 数据库:了解MySQL数据类型、SQL命令
🍑 从零开始学SQL:where条件查询与连接
🍑 Python网络开发基础,实现udp聊天器小案例
🍑 多任务版TCP服务端程序开发案例+源码
🍑 【图文教程详解】Ubuntu的两种安装方式
🍑 Python中的深拷贝与浅拷贝
文章目录
- Python 进阶篇-系列文章全篇
- 1. 在原装饰器上设置外部变量
- 2. 多重装饰器
- 3. 类装饰器
- 4. GIL锁引入
- 5. GIL概念及影响
- 6. GIL解决方案
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加载)