标签:没有 效率 模拟 second gevent seconds switch 多个 join
协程均处在同一个线程中,可以看做是不同的子程序,因此切换效率更高,并且共享资源串行修改,不需要加锁
因此线程越多,协程的优势越明显。但是由于在一个线程上,因此用一个核,多核的利用需要启多个进程再启相应的协程利用
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
标签:没有 效率 模拟 second gevent seconds switch 多个 join
原文地址:https://www.cnblogs.com/jianbo1995/p/9502989.html