协程小记
Posted jianbo1995
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了协程小记相关的知识,希望对你有一定的参考价值。
协程均处在同一个线程中,可以看做是不同的子程序,因此切换效率更高,并且共享资源串行修改,不需要加锁
因此线程越多,协程的优势越明显。但是由于在一个线程上,因此用一个核,多核的利用需要启多个进程再启相应的协程利用
from greenlet import greenlet def bar(): print(1) g2.switch() print(3) g2.switch() def foo(): print(2) g1.switch() print(4) g1 = greenlet(bar) g2 = greenlet(foo) g1.switch()
简单的实现协程的作用
import gevent def bar(): print("run in bar") #1 gevent.sleep(2) #模拟io切换 print(‘change to foo after 2 seconds‘) #2 def foo(): print(‘run in foo‘) #3 gevent.sleep(1) print(‘change to bar after 1 second‘) #4 def fin(): print(‘run in fin‘) #5 gevent.sleep(0) print(‘run in fin again‘) #6 gevent.joinall([ gevent.spawn(foo), gevent.spawn(bar) ])
gevent.sleep模拟io切换,转到其他协程,调用顺序#(1,3,5,6,4,2),在5之后由于fin的sleep会回到bar,但是此时bar依旧没有就绪,因此又到foo,再回到fin
以上是关于协程小记的主要内容,如果未能解决你的问题,请参考以下文章