当前位置: 代码迷 >> 综合 >> 什么是猴子补丁(monkey patch)
  详细解决方案

什么是猴子补丁(monkey patch)

热度:6   发布时间:2023-12-27 23:50:12.0

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 ujsondef monkey_patch_json():json.__name__ = 'ujson'json.dumps = ujson.dumpsjson.loads = ujson.loadsmonkey_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来替换.