python的猴子補丁monkey patch

2022-06-25 15:24:10 字數 866 閱讀 5977

monkey patch指的是在執行時動態替換,一般是在startup的時候.

用過gevent就會知道,會在最開頭的地方gevent.monkey.patch_all();把標準庫中的thread/socket等給替換掉.這樣我們在後面使用socket的時候可以跟平常一樣使用,無需修改任何**,但是它變成非阻塞的了.

之前做的乙個遊戲伺服器,很多地方用的import json,後來發現ujson比自帶json快了n倍,於是問題來了,難道幾十個檔案要乙個個把import json改成import ujson as json嗎?

其實只需要在程序startup的地方monkey patch就行了.是影響整個程序空間的.

同一程序空間中乙個module只會被執行一次.

下面是**.

main.py

import json

import ujson

def monkey_patch_json():

json.__name__ = 'ujson'

json.dumps = ujson.dumps

json.loads = ujson.loads

monkey_patch_json()

print 'main.py',json.__name__

import sub

sub.py

import json

print 'sub.py',json.__name__

執行main.py,可以看到都是輸出'ujson',說明後面import的json是被patch了的.

最後,注意不能單純的json = ujson來替換.

Python 猴子補丁

生活中衣服破了洞,我們不想將其丟掉,就會打個補丁縫縫補補講究著用,這種理解帶入程式中也是這樣,個別功能有問題,但我們並不想將其重構或丟掉,只想將其個別功能替換,這就是打補丁的概念,為啥稱呼為猴子補丁這就不得而知了,但我們要知道打補丁是種補救措施,並不一定是好事不要濫用 程式中某個功能使用不理想效率低...

python 猴子補丁 Monkey patch

用來在執行時動態修改已有的 而不需要修改原始 在用gevent時 可實現併發同步非同步程式設計 會在最開頭的地方gevent.monkey.patch all 把標準庫中的thread socket等給替換掉.這樣我們在後面使用socket的時候可以跟平常一樣使用,無需修改任何 但是它變成非阻塞的了...

Python中的猴子補丁

monkey patch指的是在執行時動態替換,一般是在startup的時候.用過gevent就會知道,會在最開頭的地方gevent.monkey.patch all 把標準庫中的thread socket等給替換掉.這樣我們在後面使用socket的時候可以跟平常一樣使用,無需修改任何 但是它變成非...