page contents

Python里面的猴子补丁?是什么?

猴子补丁:Monkey Patch,主要功能就是动态的属性的替换,模块运行时替换的功能。说直接点就是程序功能的追加或者变更。

attachments-2024-12-BEp8OthF676373333e82e.png一、什么是猴子补丁?

猴子补丁:Monkey Patch,主要功能就是动态的属性的替换,模块运行时替换的功能。说直接点就是程序功能的追加或者变更。
二、Monkey Patch功能简介
Monkey Patch允许在程序运行期间动态的修改一个类或者模块。
三、举个例子
之前一个做游戏的,在很多地方都用了**import json,后来发现ujson比Python自带的json快很多,于是问题来了,几十几百个文件难道要一个一个的把import json替换成import ujson as json吗?那也太痛苦了,其实只需要在进程开始的地方使用monkey patch**就行了,它是会影响整个进程空间的,同一进程空间中一个module只会被执行一次。

"""
file:json_serialize.py
"""
import time
import json

# 时间测试装饰器
def run_time(func):
    def inner(*args, **kwargs):
        start_time = time.time()
        result = func(*args, **kwargs)
        end_time = time.time()
        print(f'程序用时:{end_time - start_time}')
        return result

    return inner

@run_time
def json_dumps(obj):
    return json.dumps(obj)

# 生成测试字典
test_dict = {i: 1 for i in range(1, 10000001)}
使用json模块执行原程序:
"""
file:run.py
"""
from json_serialize import json_dumps, test_dict

print(f'json.dumps编码用时:', end='')
r1 = json_dumps(test_dict)
原程序的性能太低,我们可以使用ujson将json替换掉!
使用monkey patch修改后:
"""
file:run.py
"""
import json
import ujson
from json_serialize import json_dumps, test_dict

def monkey_patch_json():
    json.dumps = ujson.dumps

monkey_patch_json()
print(f'使用猴子补丁之后json.dumps编码用时:', end='')
json_dumps(test_dict)
这个时候在这个项目中json模块就被monkey patch修改为了ujson模块。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

  • 发表于 2024-12-19 09:13
  • 阅读 ( 48 )
  • 分类:Python开发

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
小柒
小柒

1658 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 1658 文章
  3. Pack 1135 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章