1. 什么是猴子补丁?
- 只是一个概念,不属于任何包和模块
- 这里利用了python一切皆对象的理念,在程序运行过程中,动态修改方法
# 什么是猴子补丁?
# 只是一个概念,不属于任何包和模块
# 利用了python一切皆对象的理念,在程序运行过程中,动态修改方法
# 概念
# class Monkey():
# def play(self):
# print('猴子在玩')
#
#
# class Dog():
# def play(self):
# print('狗子在玩')
#
# m=Monkey()
# # m.play()
# m.play=Dog().play
#
# m.play()
2. 有什么用?
- 这里有一个比较实用的例子,
- 很多用到import json,后来发现ujson性能更高。
- 如果觉得把每个文件的import json改成import ujson as json成本较高,
- 或者说想测试一下ujson替换是否符合预期, 只需要在入口加上:
2.1 模块的替换
# 只需要在程序入口
# import json
# import ujson
#
# def monkey_patch_json():
# json.__name__ = 'ujson'
# json.dumps = ujson.dumps
# json.loads = ujson.loads
# monkey_patch_json()
#
# aa=json.dumps({'name':'lqz','age':19})
# print(aa)
2.2 基于协程
#协程:单线程下实现并发
# from gevent import monkey;monkey.patch_all()
# import gevent
# import time
# def eat():
# print('eat food 1')
# time.sleep(2)
# print('eat food 2')
#
# def play():
# print('play 1')
# time.sleep(1)
# print('play 2')
#
# g1=gevent.spawn(eat)
# g2=gevent.spawn(play)
# gevent.joinall([g1,g2])
# print('主')