• python的猴子补丁monkey patch


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

  • 相关阅读:
    orm操作
    模板语言
    路由
    newlib中printf库函数的实现
    调试问题记录
    GCC部分编译选项解析
    Lauterbach TRACE32使用技巧记录
    ARM32 页表映射过程
    TTBR0与TTBR1
    Camera Sensor基础知识
  • 原文地址:https://www.cnblogs.com/work115/p/5817781.html
Copyright © 2020-2023  润新知