协程
概念
协程是比线程更轻量级的用户态线程,是模拟出的线程。好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。
实现
1.生成者消费者模型
def eater():
while True:
food = yield#yield相当于return,同时也可以接收send()传进来的值
print("A dog is eating a %s" % food)
def producer(num):
num=num#接收参数num
e=eater()
e.__next__()
for i in range(num):
food="baozi"+str(i)#生产包子
print("producer have producted a %s"%food)
##############################
e.send(food)#把食品传送给消费者,这里的send有两个作用:1.将e执行__next__方法2.将参数传递给e里的yield
producer(10)
结果:
producer have producted a baozi0
A dog is eating a baozi0
producer have producted a baozi1
A dog is eating a baozi1
producer have producted a baozi2
A dog is eating a baozi2
producer have producted a baozi3
A dog is eating a baozi3
producer have producted a baozi4
A dog is eating a baozi4
producer have producted a baozi5
A dog is eating a baozi5
producer have producted a baozi6
A dog is eating a baozi6
producer have producted a baozi7
A dog is eating a baozi7
producer have producted a baozi8
A dog is eating a baozi8
producer have producted a baozi9
A dog is eating a baozi9
Process finished with exit code 0
2.gevent使用(需安装)
import gevent
def do():
print("step1")
gevent.sleep(2)#模拟i/o操作
print("step3")
def run():
print("step2")
gevent.sleep(2)#模拟i/o操作
print("step4")
gevent.joinall([
gevent.spawn(do),
gevent.spawn(run)
])
结果:
step1
step2
step3
step4
Process finished with exit code 0还没有评论,来说两句吧
