asyncio解释
- start 0
- start 1
- start 2
- end 1
- end 2
- end 0
真正有常识的人的成长过程,就像麦穗的成长过程:麦穗空的时刻,麦子长得很快,麦穗骄傲地高昂扬起,然则,麦穗成熟饱满时,它们开端谦虚,垂下麦芒。
——蒙田《蒙田漫笔全集》
上篇《Python 多线程鸡年不鸡肋》阐述了关于python多线程是否是鸡肋的问题,获得了一些网友的承认,当然也有一些不合看法,表示协程比多线程不知强若干,在协程面前多线程算是鸡肋。好吧,对此我也表示赞成,然而上篇我阐述的不雅点不在于多线程与协程的比较,而是在于IO密集型法度榜样中,多线程另有效武之地。
对于协程,我表示其效力确非多线程能比,但本人对此懂得并不深刻,是以比来几日参考了一些材料,进修整顿了一番,在此分享出来仅供大年夜家参考,如有谬误请斧正,多谢。申明:本文介绍的协程是入门级别,大年夜神请绕道而行,谨防入坑。
python3.x协程应用:
- asynico + yield from(python3.4)
- asynico + await(python3.5)
- gevent
文┞仿思路:本文将先介绍协程的概念,然后分别介绍Python2.x与3.x下协程的用法,最终将协程与多线程做比较并介绍异步爬虫模块。
协程
概念
换成多线程的代码看看:
协程,又称微线程,纤程,英文名Coroutine。协程的感化,是在履行函数A时,可以随时中断,去履行函数B,然后中断持续履行函数A(可以自由切换)。但这一过程并不是函数调用(没有调用语句),这一全部过不雅察似像多线程,然而协程只有一个线程履行。
解释:协程可以处理IO密集型法度榜样的效力问题,然则处理CPU密集型不是它的长处,如要充分发挥CPU应用率可以结合多过程+协程。
以上只是协程的一些概念,可能听起来比较抽象,那么我结合代码讲一讲吧。这里重要介绍协程在Python的应用,Python2对协程的支撑比较有限,生成器的yield实现了一部分但不完全,gevent模块倒是有比较好的实现;Python3.4今后惹人了asyncio模块,可以很好的应用协程。
Python2.x协程
python2.x协程应用:
- yield
- gevent
python2.x中支撑协程的模块不多,gevent算是比较常用的,这里就R单介绍一下gevent的用法。
Gevent
gevent是第三方库,经由过程greenlet实现协程,其根本思惟:
当一个greenlet碰到IO操作时,比如拜访收集,就主动切换到其他的greenlet,比及IO操作完成,再在恰当的时刻切换回来持续履行。因为IO操作异常耗时,经常使法度榜样处于等待状况,有了gevent为我们主动切换协程,就包管总有greenlet在运行,而不是等待IO。
优势
- 履行效力极高,因为子法度榜样切换(函数)不是线程切换,由法度榜样自身控制,没有切换线程的开销。所以与多线程比拟,线程的数量越多,协程机能的优势越明显。
- 不须要多线程的锁机制,因为只有一个线程,也不存在同时写变量冲突,在控制共享资本时也不须要加锁,是以履行效力高很多。
Install
- pip install gevent
解释:大年夜结不雅上来看,履行get_body的次序应当先是输出”start”,然后履行到urllib2时碰着IO堵塞,则会主动切换运行下一?法度榜样(持续履行get_body输出start),直到urllib2返回结不雅,再履行end。也就是说,法度榜样没有等待urllib2请求网站返回结不雅,而是直接先跳过了,等待履行完毕再回来获取返回值。值得一提的是,在此过程中,只有一个线程在履行,是以这与多线程的概念是不一样的。
最新版貌似支撑windows了,之前测试似乎windows上运行不了……
Usage
起首来看一个简单的爬虫例子:
- #! -*- coding:utf-8 -*-
- import gevent
- from gevent import monkey;monkey.patch_all()
- import urllib2
- def get_body(i):
- print "start",i
- urllib2.urlopen("http://cn.bing.com"
推荐阅读
机能分析vmstat虚拟内存统计用法Usage: vmstat [options] [delay [count]] Options: -a, --active active/inactive memory -f, --forks number of forks since boot -m, --slabs slabinfo -n, --one-header do>>>详细阅读
本文标题:Python协程:概念及其用法
地址:http://www.17bianji.com/lsqh/35784.html
1/2 1