“猴子补丁”(monkey patching)指的是什么?

Monkey patching是指在运行时动态替换代码,如gevent通过gevent.monkey.patch_all()替换标准库中的thread/socket实现非阻塞IO。这种技术允许在不修改原有代码的情况下,全局替换模块,例如将json模块替换为更快的ujson,只需在进程启动时进行patch,避免大量代码修改。
摘要由CSDN通过智能技术生成

Monkey patch指的是在执行时动态替换,通常是在startup的时候。
用过gevent就会知道,会在最开头的地方gevent.monkey.patch_all();
把标准库中的thread/socket等给替换掉,这样我们在后面使用socket的时候能够跟寻常一样使用,无需改动不论什么代码,可是它变成非堵塞的了。
之前做的一个游戏server,非常多地方用的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来替换。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茉莉清茶LG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值