首页 > 其他分享 >猴子补丁?是什么?

猴子补丁?是什么?

时间:2023-12-05 17:03:07浏览次数:34  
标签:什么 补丁 猴子 dumps json dict time import ujson

一、什么是猴子补丁?

猴子补丁: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模块。

标签:什么,补丁,猴子,dumps,json,dict,time,import,ujson
From: https://blog.51cto.com/u_15739596/8693700

相关文章

  • 聊城商标注册为什么要多类全类保护
    聊城商标注册为什么要多类全类保护  恒标知产刘经理  一、为什么要全类多类注册保护? 商标全类保护是指申请人在办理商标注册时指定所有类别的商品及服务,使其商标在全部类别受到保护。有人认为在商标还不知名的情况下没有必要申请全类注册。但是,事前防御总比事后救济要好。商标......
  • 流媒体音视频/安防视频云平台/可视化监控平台EasyCVR无法启动且打印panic报错,是什么原
    国标GB视频监控管理平台/视频集中存储/云存储EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,实现视频资源的鉴权管理、按需调阅、全网分发、智能分析等。AI智能大数据视频分析EasyCVR平台已经广泛应用在工地、工厂、园区、楼宇、校园、仓储等场景中......
  • 为什么说Helplook是2023年最佳SaaS软件
    引言:在数字化时代,SaaS(SoftwareasaService)软件为企业提供了高效、灵活和可扩展的解决方案。在2023年,Helplook作为一款卓越的SaaS软件,在客户服务领域脱颖而出。本文将介绍Helplook的特点、优势以及为企业带来的价值,以帮助您了解为何它是2023年最佳的SaaS软件选择。Helplook|卓越的......
  • 流媒体音视频/安防视频云平台/可视化监控平台EasyCVR无法启动且打印panic报错,是什么原
    国标GB视频监控管理平台/视频集中存储/云存储EasyCVR能在复杂的网络环境中,将分散的各类视频资源进行统一汇聚、整合、集中管理,实现视频资源的鉴权管理、按需调阅、全网分发、智能分析等。AI智能大数据视频分析EasyCVR平台已经广泛应用在工地、工厂、园区、楼宇、校园、仓储等场景......
  • SAP、ERP、SRM、CRM、WMS、TMS、MES、APS、PLM、OA、HR系统都是些什么?
     一、基础定义简称中文名简述核心模块示例系统英文全称SAP先进的企业资源计划ERP软件适用于中大型企业,供应链管理方面,SAP系统可以实现全过程跟踪,对供应商进行评价和管理,以及与第三方物流公司进行对接等功能。采购、库存(MM)、销售(SD)、生产制造业务(PP)、财务......
  • 什么是 MVCC
    又双叒叕被面试官问倒了...MVCC(Multi-VersionConcurrencyControl)是一种数据库并发控制机制,主要用于处理多个事务同时访问和修改数据库时的并发问题:定义:MVCC允许数据库在事务并发执行时维护不同版本的数据,而不是简单地锁定数据。每个事务在执行时看到的数据版本基于事务开......
  • 安防监控RTSP视频平台EasyNVR不显示通道、无法创建角色是什么原因?
    安防视频监控平台EasyNVR可支持设备通过RTSP/Onvif协议接入,并能提供视频实时监控、录像、回放、云存储、告警、平台级联等功能,平台还具备设备管理、用户管理、权限管理、流媒体接入与转发管理等,可对外分发多格式的视频流,包括RTSP、RTMP、HTTP-FLV、WS-FLV、HLS、WebRTC等。为了便于......
  • maxWait: 600000是什么意思
    maxWait:600000是指在使用连接池管理数据库连接时,最大等待时间的设置。连接池是一种用于管理和复用数据库连接的技术,它可以提高应用程序对数据库的性能和并发处理能力。当应用程序需要获取一个数据库连接时,如果连接池中的连接已经全部被占用,那么应用程序就需要等待其他连接释放后......
  • process.nextTick是什么?
    process.nextTick是Node.js中一个特殊的函数,用于在当前操作结束后(当前事件循环的末尾)立即执行回调函数。它比setImmediate的优先级更高,并且会在下一个微任务队列中执行,而不是下一个事件循环迭代中。使用process.nextTick可以将回调函数安排在当前操作的末尾,以确保它在事件......
  • 2023年广东工业大学腾讯杯新生程序设计竞赛不知道叫什么名字(前缀和)
    需要的是男生女生数量相同,做个转化,女生变成-1,然后求一遍前缀和,我们希望找到最长的满足\(sum(l,r)=0\)的区间也就是\(sum(r)-s(l-1)=0\)考虑枚举右端点,找到最左端和它相等的sum就是对于当前右端点的最长的。最开始想了个二分答案的假做法,011100,这里答案是6,长度为4不满足......