注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

还东国的博客

行之苟有恒,久久自芬芳

 
 
 

日志

 
 

(转载)什么是猴子补丁(monkey patch)  

2016-07-22 16:46:42|  分类: 环境安装使用 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

什么是猴子补丁(monkey patch)

http://blog.csdn.net/handsomekang/article/details/40297775版权声明:本文为博主原创文章,未经博主允许不得转载。

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

[python] view plain copy CODE上查看代码片派生到我的代码片

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

[python] view plain copy CODE上查看代码片派生到我的代码片

import json 

print 'sub.py',json.__name__ 

运行main.py,可以看到都是输出'ujson',说明后面importjson是被patch了的.

 

最后,注意不能单纯的json = ujson来替换.

  评论这张
 
阅读(90)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017