协程小记

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

以上是关于协程小记的主要内容,如果未能解决你的问题,请参考以下文章

为啥 LiveData 没有从协程更新?

无法从ViewModel向用户显示协程错误消息

Python小记5

python小记--解释器

python学习小记

Python小记7