協程原理 | 協程案例切換 | 協程開發 | 協程網絡下載

  協程原理:網絡

def go():
    print(1)
    yield(1)  #生成器
    print(11)
    yield(11)
    print(111)
    yield (111)
my=go()   #分段執行
print(type(my))
print(next(my))

  協程案例切換:url

import greenlet
import time
def   go1():
    while True:
        print("我是小明,雪糕我吃一口")
        gr2.switch()
        time.sleep(1)

def go2():
    while True:
        print("我是李娜,雪糕我吃一口")
        gr1.switch()
        time.sleep(1)

if __name__=="__main__":
    gr1=greenlet.greenlet(go1)
    gr2=greenlet.greenlet(go2)
    gr1.switch()

  協程開發:spa

import gevent
import time
"""
#執行完須要30秒  
showwait("王一",10)
showwait("李二",10)
showwait("張三",10)
"""
def showwait(name,n):  #name表明名字  #n表明幾秒
    for i in range(n):
        print(name,"等待了",i+1,"")
        gevent.sleep(1)  #不須要等待就順序執行,須要等待,自動切換
g1=gevent.spawn(showwait,"龐子卓",10)
g2=gevent.spawn(showwait,"韓海飛",10)
g3=gevent.spawn(showwait,"李海寶",10)
g1.join()    #表示加入協程
g2.join()
g3.join()

  協程網絡下載:code

import gevent
import gevent.monkey
import urllib.request
gevent.monkey.patch_all()  #自動切換

def download(url):
    print("start",url)
    data=urllib.request.urlopen(url).read()
    print("length",len(data),url)   #打印源代碼的長度,並顯示url
#建立一個列表,加載多個任務,    #gevent.joinall  表示所有加入協程
gevent.joinall([gevent.spawn(download,"http://www.baidu.com"),
gevent.spawn(download,"http://www.163.com"),
gevent.spawn(download,"http://www.qq.com"),
gevent.spawn(download,"http://www.sina.com"),
                ])
相關文章
相關標籤/搜索