协程原理 | 协程案例切换 | 协程开发 | 协程网络下载

  协程原理:网络

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"),
                ])
相关文章
相关标签/搜索