一、什麼是猴子補丁?
猴子補丁: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
原文鏈接:https://mp.weixin.qq.com/s/gm7KnqjnTvoO5yk7JnGWVA
※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※※
我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。各位也可以關注我的Facebook,按讚我的臉書並私訊「10」,送你十週入門數據分析電子書唷!期待你與我互動起來~
文章推薦
◆跟資料打交道的人都得會的這8種資料模型,滿足工作中95%的需求
回顧十週入門數據分析系列文:
關注數據君的臉書:
我是「數據分析那些事」。常年分享數據分析乾貨,不定期分享好用的職場技能工具。按贊我的臉書,會有豐富資料包贈送唷!