zoukankan      html  css  js  c++  java
  • 什么是猴子补丁(monkey patch)

    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来替换.




  • 相关阅读:
    异常问题处理记录(转载篇)
    linux服务器出现大量连接:sshd: root@notty
    第4章 Python运算符
    第2章 python基础知识
    第1章 python环境搭建
    Tomcat漏洞升级
    第3章 数据类型、运算符和表达式
    第2章 C语言基础知识
    第1章 概述
    第1章 企业管理概论
  • 原文地址:https://www.cnblogs.com/yxysuanfa/p/6855252.html
Copyright © 2011-2022 走看看