协程
- 是一个比线程更轻量级单位,是组成现成的各个函数。
- 在一个线程内可以实现并发。当某个函数发生IO操作,可以马上切换到另一个函数去执行。提高单线程的cpu利用率。
- 使用yield可以保存当前状态,实现函数暂停。只是单存的切换,不支持IO操作时,自动切换。
def consumer():
while 1:
x=yield #函数暂停
print(x)
def producer():
g=consumer()
next(g)
for i in range(100):
g.send(i) #传值给yield
print ("is producing")
producer()
#结果输出
0
is producing
1
is producing
2
is producing
3
is producing
4
is producing
5
is producing
6
is producing
- import gevent 当函数中遇到IO操作时,就自动切换到另一个函数
gevent.spawn(func,参数)
gevent.join() 让函数func执行完毕
func停止的原因,func执行完了 遇到IO操作
import gevent
def func1():
print ("1,2,3,4")
gevent.sleep(1)
print ("5,6,7,8")
gevent.sleep(1)
def func2():
print ("4,3,2,1")
gevent.sleep(1)
print ("8,7,6,5")
g1=gevent.spawn(func1)
g2=gevent.spawn(func2)
g1.join()
#结果
1,2,3,4
4,3,2,1
5,6,7,8
8,7,6,5
网友评论