python協程 示例

協程python

1.協程 又稱微線程 是一種輕量級線程  攜程有本身的寄存器 上下文 和棧 攜程能保留上一次調用時的狀態併發

2.協程優勢和缺點 :函數

1.無需線程上下文切換的開銷高併發

2.無需原子操做鎖定及同步的開銷spa

3.高併發 高擴展性 低成本線程

缺點:code

1.沒法利用多核資源協程

2.阻塞操做會阻塞整個程序blog

  python利用 yield來達到攜程效果,:先看下 關於yield的兩個用法 ( yield from  是python3 的方法)資源

def aa():
    for i in 'ab':
        yield i
    for i2 in range(0, 3):
        yield i2
print list(aa())
》》》
['a', 'b', 0, 1, 2]


def bb():
    yield from 'ab'
    yield from range(3)
print (list(bb()))
》》》
['a', 'b', 0, 1, 2]

利用yield 來寫一個經典的生產 消費者:

 

def consumer(name):# 消費者
    print("--->starting")
    while True:
        new_baozi = yield
        print("[%s] is eating baozi %s" % (name, new_baozi))


def producer():
    # r = con.__next__()
    r = con.send(None)  #啓動生成器
    n = 0
    while n < 5:
        n += 1
        con.send(n)
    time.sleep(3)

if __name__ == '__main__':
    con = consumer("c1")
    p = producer()
"""1.給con賦值爲消費者生成器函數2.給p賦值爲生產者函數3.進入生產者函數 啓動消費者生成器函數4.進入消費者函數 遇到yield函數中止5.返回到生產者函數 進入while 循環 給消費者函數發送n的值6.進入消費者函數 此時yield的返回值爲n"""歡迎糾錯
相關文章
相關標籤/搜索