协程
实现协程
使用 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 这几个模块,需要自己下载