from gevent import monkey
import gevent
import time# 协程:gevent,遇IO阻塞,自动切换
monkey.patch_all()def fun01():print("床前明月光")time.sleep(3) # 3 2 1print("疑是地上霜")def fun02():print("举头望明月")time.sleep(3) # 3 2 1print("低头思故乡")g1 = gevent.spawn(fun01)
g2 = gevent.spawn(fun02)
g1.join()
gevent的优势不仅仅是在代码中调用方便,厉害的是它拥有的monkey机制。
假设你不愿意修改原来已经写好的python代码,但是又想充分利用gevent机制,那么你就可以用monkey来做到这一点。你所要做的就是在文件开头打一个patch,
那么它就会自动替换你原来的thread、socket、time、multiprocessing等代码,全部变成gevent框架。这一切都是由gevent自动完成的。
注意这个patch是在所有module都import了之后再打,否则没有效果。甚至在编写的Web App代码的时候,不需要引入gevent的包,也不需要改任何代码,
仅仅在部署的时候,用一个支持gevent的WSGI服务器,就可以获得数倍的性能提升。
from gevent import monkeymonkey.patch_all() # 必须放在其他导入之前! 模拟耗时操作import gevent # 遇到IO阻塞 程序自动切换def demo(name):print("1开始执行昂", name)gevent.sleep(2)print("阻塞完毕1")def demo2(name):print("2开始执行昂", name)gevent.sleep(2)print("阻塞完毕2")g = gevent.spawn(demo, "丈八")
g2 = gevent.spawn(demo2, "丈八")
g.join()
print(gevent.__version__)