码迷,mamicode.com
首页 > 其他好文 > 详细

协程小记

时间:2018-08-19 22:42:40      阅读:196      评论:0      收藏:0      [点我收藏+]

标签:没有   效率   模拟   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

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!