python的猴子补丁monkey patch

monkey patch指的是在运行时动态替换,一般是在startup的时候.

用过gevent就会知道,会在最开头的地方gevent.monkey.patch_all();把标准库中的thread/socket等给替换掉.这样我们在后面使用socket的时候可以跟平常一样使用,无需修改任何代码,但是它变成非阻塞的了.

一个比较实用的例子,很多代码用到 import json,后来发现ujson性能更高,如果觉得把每个文件的import json 改成 import ujson as json成本较高,或者说想测试一下用ujson替换json是否符合预期,只需要在入口加上:

1 import json 
2 import ujson 
3 
4 def monkey_patch_json(): 
5     json.__name__ = 'ujson' 
6     json.dumps = ujson.dumps 
7     json.loads = ujson.loads 
8 
9 monkey_patch_json()

最后,注意不能单纯的json = ujson来替换.

猜你喜欢

转载自www.cnblogs.com/robert871126/p/10107127.html