什么是猴子补丁?
# 只是一个概念,不属于任何包和模块
# 利用了python一切皆对象的理念,在程序运行过程中,动态修改方法
# 概念
class Monkey():
def play(self):
print('猴子在玩')
class Dog():
def play(self):
print('狗子在玩')
m=Monkey()
# m.play() # 猴子在玩
m.play=Dog().play
m.play() # 狗子在玩 被动态修改了
有什么用?
# 这里有一个比较实用的例子,
# 很多用到import json,后来发现ujson性能更高,
# 如果觉得把每个文件的import json改成import ujson as json成本较高,
# 或者说想测试一下ujson替换是否符合预期, 只需要在入口加上:
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':'tiger','age':18}) # 这时候所有的json.dumps其实是ujson.dumps
print(aa)
协程:单线程下实现并发
from gevent import monkey;monkey.patch_all()
import gevent
import time
def eat():
print('eat food 1')
time.sleep(2) # 实际是gevent.sleep(2)
print('eat food 2')
def play():
print('play 1')
time.sleep(1) # 实际是gevent.sleep(1)
print('play 2')
g1=gevent.spawn(eat)
g2=gevent.spawn(play)
gevent.joinall([g1,g2])
print('主')
标签:play,ujson,补丁,猴子,json,gevent,print,import
From: https://www.cnblogs.com/piggthird/p/17826917.html