Python猴子補(bǔ)丁是啥意思?
一、什么是猴子補(bǔ)???
猴子補(bǔ)?。篗onkey Patch,主要功能就是動(dòng)態(tài)的屬性的替換,模塊運(yùn)行時(shí)替換的功能。說(shuō)直接點(diǎn)就是程序功能的追加或者變更。
二、Monkey Patch功能簡(jiǎn)介
Monkey Patch允許在程序運(yùn)行期間動(dòng)態(tài)的修改一個(gè)類或者模塊。
三、舉個(gè)例子
之前一個(gè)做游戲的,在很多地方都用了**import json,后來(lái)發(fā)現(xiàn)ujson比Python自帶的json快很多,于是問(wèn)題來(lái)了,幾十幾百個(gè)文件難道要一個(gè)一個(gè)的把import json替換成import ujson as json嗎?那也太痛苦了,其實(shí)只需要在進(jìn)程開(kāi)始的地方使用monkey patch**就行了,它是會(huì)影響整個(gè)進(jìn)程空間的,同一進(jìn)程空間中一個(gè)module只會(huì)被執(zhí)行一次。
"""
file:json_serialize.py
"""
import time
import json
# 時(shí)間測(cè)試裝飾器
def run_time(func):
def inner(*args, **kwargs):
start_time = time.time()
result = func(*args, **kwargs)
end_time = time.time()
print(f'程序用時(shí):{end_time - start_time}')
return result
return inner
@run_time
def json_dumps(obj):
return json.dumps(obj)
# 生成測(cè)試字典
test_dict = {i: 1 for i in range(1, 10000001)}
使用json模塊執(zhí)行原程序:
"""
file:run.py
"""
from json_serialize import json_dumps, test_dict
print(f'json.dumps編碼用時(shí):', 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'使用猴子補(bǔ)丁之后json.dumps編碼用時(shí):', end='')
json_dumps(test_dict)
這個(gè)時(shí)候在這個(gè)項(xiàng)目中json模塊就被monkey patch修改為了ujson模塊。
評(píng)論
圖片
表情
