首页 > 其他 > 详细

协程小记

时间:2018-08-19 22:38:57      阅读:216      评论:0      收藏:0      [点我收藏+]

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

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

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

协程小记

原文:https://www.cnblogs.com/jianbo1995/p/9502989.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!