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 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来替换.
---------------------
作者:mattkang
来源:优快云
原文:https://blog.youkuaiyun.com/handsomekang/article/details/40297775
版权声明:本文为博主原创文章,转载请附上博文链接!
本文深入探讨了MonkeyPatch在Python中的应用,特别是在游戏服务器优化场景下,通过动态替换标准库实现性能提升的方法。作者分享了如何在不修改大量代码的情况下,将内置的json模块替换为更高效的ujson模块,从而显著提高应用程序的运行效率。
2511

被折叠的 条评论
为什么被折叠?



