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来替换.