monkey patch 指的是在运行时动态替换, 一般是在 startup 的时候.
用过 gevent 就会知道, 会在最开头的地方 gevent.monkey.patch_all(); 把标准库中的 thread/socket 等给替换掉. 这样我们在后面使用 socket 的时候可以跟平常一样使用, 无需修改任何代码, 但是它变成非阻塞的了.
一个比较实用的例子, 很多代码用到 import JSON, 后来发现 ujson 性能更高, 如果觉得把每个文件的 import JSON 改成 import ujson as JSON 成本较高, 或者说想测试一下用 ujson 替换 JSON 是否符合预期, 只需要在入口加上:
- import JSON
- import ujson
- def monkey_patch_json():
- JSON.__name__ = 'ujson'
- JSON.dumps = ujson.dumps
- JSON.loads = ujson.loads
- monkey_patch_json()
最后, 注意不能单纯的 JSON = ujson 来替换.
来源: http://www.bubuko.com/infodetail-2881420.html