协程小记

协程均处在同一个线程中,可以看做是不同的子程序,因此切换效率更高,并且共享资源串行修改,不需要加锁

因此线程越多,协程的优势越明显。但是由于在一个线程上,因此用一个核,多核的利用需要启多个进程再启相应的协程利用

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

posted @ 2018-08-19 22:22  快乐的打字员~  阅读(109)  评论(0编辑  收藏  举报