协程

实现协程

使用  yield  的生成器函数,实现简单的协程操作,例如用生成器函数实现生产者消费者模型

greenlet模块实现协程,这个模块是c实现的一个协程模块,它可以使得用户在任意函数之间切换,而不需要声明generator

#使用greenlet模块
import greenlet

def test1():
    print(12)
    gr2.switch()     #切换到test2执行
    print(34)
    gr2.switch()


def test2():
    print(56)
    gr1.switch()
    print(78)


gr1 = greenlet.greenlet(test1)     #创建协程对象
gr2 = greenlet.greenlet(test2)
gr1.switch()      #switch进行协程切换,此时test1函数执行

gevent实现协程,它是一个封装好的一个模块,每次遇到IO阻塞,自动跳转到下一步执行

import gevent
import requests,time

start=time.time()

def f(url):
    print('GET: %s' % url)
    resp =requests.get(url)     #爬取这个网址链接里数据
    data = resp.text
    print('%d bytes received from %s.' % (len(data), url))

gevent.joinall([
        gevent.spawn(f, 'https://www.python.org/'),   #创建一个协程对象
        gevent.spawn(f, 'https://www.yahoo.com/'),
        gevent.spawn(f, 'https://www.baidu.com/'),
        gevent.spawn(f, 'https://www.sina.com.cn/'),
])

# f('https://www.python.org/')
# f('https://www.yahoo.com/')
# f('https://baidu.com/')
# f('https://www.sina.com.cn/')

print("cost time:",time.time()-start)

 注意:greenlet  和 gevent  ,requests  这几个模块,需要自己下载

posted @ 2019-06-14 00:31  saber゛  Views(143)  Comments(0Edit  收藏  举报