协程的认识

协程的好处

协程相比线程切换操作不耗费资源,线程的切换需要保存和恢复上下文,并且每个线程都有自己的cache缓存,比较好性能

线程切换导致代码碎片化,每次都要判断是否要切换,
协程只需要把所有的操作弄到一起,有一个耗时操作就切换到下一个操作继续执行

线程的问题在于他不会主动触发调度器,尤其是cpu密集型的,没有io操作

协程的实现

greenlet模块和gevent模块
greenlet需要根据程序的设计,即认为的切换协程
gevent是有耗时操作自动切换
    from gevent import monkey; 
import gevent
import urllib2

#有IO才做时需要这一句
monkey.patch_all()

def myDownLoad(url):
    print('GET: %s' % url)
    resp = urllib2.urlopen(url)
    data = resp.read()
    print('%d bytes received from %s.' % (len(data), url))

gevent.joinall([
        gevent.spawn(myDownLoad, 'http://www.baidu.com/'),
        gevent.spawn(myDownLoad, 'http://www.itcast.cn/'),
        gevent.spawn(myDownLoad, 'http://www.itheima.com/'),
])

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值