一:线程池,进程池等相关文章了解

python---基础知识回顾(十)进程和线程(py2中自定义线程池和py3中的线程池使用)

python---基础知识回顾(十)进程和线程(协程gevent:线程在I/O请求上的优化)

python---异步IO(asyncio)协程

二:异步I/O模块的了解(同协程:线程在I/O请求上的优化)

(一)asyncio模块的使用

1.使用简单实例

import asyncio,time

async def func1(num):
print(num,"before func1.....")
await asyncio.sleep(num)
print(num,"after func1......") tasks = [
asyncio.ensure_future(func1()),
asyncio.ensure_future(func1()),
] begin = time.time() loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.gather(*tasks)) loop.close() end = time.time() print(end-begin)
 before func1.....
before func1.....
after func1......
after func1......
3.003171682357788

(二).异步获取网站资源(不支持requests模块),使用asyncio模块的socket请求完成

不支持requests请求的原因:

异步的实现,需要自动切换协程,需要用到await或者yield,
而requests模块不提供切换协程的条件,所以当第一条协程执行到请求部分就停下来了,等服务器响应,
不会切到其他的协程去执行。
requests会阻塞asyncio循环,所以会出现收不到服务器响应的情况。可以使用aiohttp替代requests解决这个问题。

使用asyncio实现requests请求获取资源

import asyncio,time

async def func1(host,url='/'):
print(host,url)
reader, writer = await asyncio.open_connection(host,)
request_header_content = '''GET %s HTTP/1.0\r\nHost: %s\r\n\r\n'''%(url,host)
request_header_content = bytes(request_header_content,encoding="utf-8")
writer.write(request_header_content)
await writer.drain()
text = await reader.read()
print(host,url,text)
writer.close() tasks = [
asyncio.ensure_future(func1('www.cnblogs.com','/ssyfj/')),
asyncio.ensure_future(func1('www.baidu.com')),
asyncio.ensure_future(func1('www.ckook.com','/forum.php')),
] begin = time.time() loop = asyncio.get_event_loop()
loop.run_until_complete(asyncio.gather(*tasks)) loop.close() end = time.time() print(end-begin)
www.cnblogs.com /ssyfj/
www.baidu.com /
www.ckook.com /forum.php
www.baidu.com / b'HTTP/1.0 200 OK\r\nAccept-Ranges: bytes\r\nCache-Control: no-cache\r\nContent-Length: 14615\r\nContent-Type: text/html\r\nDate: Sun, 24 Jun 2018 10:57:33 GMT\r\nLast-Modified: Mon, 11 Jun 2018 11:19:00 GMT\r\nP3p: CP=" OTI DSP COR IVA OUR IND COM "\r\nPragma: no-cache\r\nServer: BWS/1.1\r\nSet-Cookie: BAIDUID=3C070A482979333DD407E21A39ECA46A:FG=1; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com\r\nSet-Cookie: BIDUPSID=3C070A482979333DD407E21A39ECA46A; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com\r\nSet-Cookie: PSTM=1529837853; expires=Thu, 31-Dec-37 23:55:55 GMT; max-age=2147483647; path=/; domain=.baidu.com\r\nVary: Accept-Encoding\r\nX-Ua-Compatible: IE=Edge,chrome=1\r\n\r\n<!DOCTYPE html><!--STATUS OK-->\r\n<html>\r\n<head>\r\n\t<meta http-equiv="content-type" content="text/html;charset=utf-8">\r\n\t<meta http-equiv="X-UA-Compatible" content="IE=Edge">\r\n\t<link rel="dns-prefetch" href="//s1.bdstatic.com"/>\r\n\t<link rel="dns-prefetch" href="//t1.baidu.com"/>\r\n\t<link rel="dns-prefetch" href="//t2.baidu.com"/>\r\n\t<link rel="dns-prefetch" href="//t3.baidu.com"/>\r\n\t<link rel="dns-prefetch" href="//t10.baidu.com"/>\r\n\t<link rel="dns-prefetch" href="//t11.baidu.com"/>\r\n\t<link rel="dns-prefetch" href="//t12.baidu.com"/>\r\n\t<link rel="dns-prefetch" href="//b1.bdstatic.com"/>\r\n\t<title>\xe7\x99\xbe\xe5\xba\xa6\xe4\xb8\x80\xe4\xb8\x8b\xef\xbc\x8c\xe4\xbd\xa0\xe5\xb0\xb1\xe7\x9f\xa5\xe9\x81\x93</title>\r\n\t<link href="http://s1.bdstatic.com/r/www/cache/static/home/css/index.css" rel="stylesheet" type="text/css" />\r\n\t<!--[if lte IE 8]><style index="index" >#content{height:480px\\9}#m{top:260px\\9}</style><![endif]-->\r\n\t<!--[if IE 8]><style index="index" >#u1 a.mnav,#u1 a.mnav:visited{font-family:simsun}</style><![endif]-->\r\n\t<script>var hashMatch = document.location.href.match(/#+(.*wd=[^&].+)/);if (hashMatch && hashMatch[0] && hashMatch[1]) {document.location.replace("http://"+location.host+"/s?"+hashMatch[1]);}var ns_c = function(){};</script>\r\n\t<script>function h(obj){obj.style.behavior=\'url(#default#homepage)\';var a = obj.setHomePage(\'//www.baidu.com/\');}</script>\r\n\t<noscript><meta http-equiv="refresh" content="0; url=/baidu.html?from=noscript"/></noscript>\r\n\t<script>window._ASYNC_START=new Date().getTime();</script>\r\n</head>\r\n<body link="#0000cc"><div id="wrapper" style="display:none;"><div id="u"><a href="//www.baidu.com/gaoji/preferences.html" onmousedown="return user_c({\'fm\':\'set\',\'tab\':\'setting\',\'login\':\'0\'})">\xe6\x90\x9c\xe7\xb4\xa2\xe8\xae\xbe\xe7\xbd\xae</a>|<a id="btop" href="/" onmousedown="return user_c({\'fm\':\'set\',\'tab\':\'index\',\'login\':\'0\'})">\xe7\x99\xbe\xe5\xba\xa6\xe9\xa6\x96\xe9\xa1\xb5</a>|<a id="lb" href="https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F" onclick="return false;" onmousedown="return user_c({\'fm\':\'set\',\'tab\':\'login\'})">\xe7\x99\xbb\xe5\xbd\x95</a><a href="https://passport.baidu.com/v2/?reg&regType=1&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F" onmousedown="return user_c({\'fm\':\'set\',\'tab\':\'reg\'})" target="_blank" class="reg">\xe6\xb3\xa8\xe5\x86\x8c</a></div><div id="head"><div class="s_nav"><a href="/" class="s_logo" onmousedown="return c({\'fm\':\'tab\',\'tab\':\'logo\'})"><img src="//www.baidu.com/img/baidu_jgylogo3.gif" width="117" height="38" border="0" alt="\xe5\x88\xb0\xe7\x99\xbe\xe5\xba\xa6\xe9\xa6\x96\xe9\xa1\xb5" title="\xe5\x88\xb0\xe7\x99\xbe\xe5\xba\xa6\xe9\xa6\x96\xe9\xa1\xb5"></a><div class="s_tab" id="s_tab"><a href="http://news.baidu.com/ns?cl=2&rn=20&tn=news&word=" wdfield="word" onmousedown="return c({\'fm\':\'tab\',\'tab\':\'news\'})">\xe6\x96\xb0\xe9\x97\xbb</a> <b>\xe7\xbd\x91\xe9\xa1\xb5</b> <a href="http://tieba.baidu.com/f?kw=&fr=wwwt" wdfield="kw" onmousedown="return c({\'fm\':\'tab\',\'tab\':\'tieba\'})">\xe8\xb4\xb4\xe5\x90\xa7</a> <a href="http://zhidao.baidu.com/q?ct=17&pn=0&tn=ikaslist&rn=10&word=&fr=wwwt" wdfield="word" onmousedown="return c({\'fm\':\'tab\',\'tab\':\'zhidao\'})">\xe7\x9f\xa5\xe9\x81\x93</a> <a href="http://music.baidu.com/search?fr=ps&key=" wdfield="key" onmousedown="return c({\'fm\':\'tab\',\'tab\':\'music\'})">\xe9\x9f\xb3\xe4\xb9\x90</a> <a href="http://image.baidu.com/i?tn=baiduimage&ps=1&ct=201326592&lm=-1&cl=2&nc=1&word=" wdfield="word" onmousedown="return c({\'fm\':\'tab\',\'tab\':\'pic\'})">\xe5\x9b\xbe\xe7\x89\x87</a> <a href="http://v.baidu.com/v?ct=301989888&rn=20&pn=0&db=0&s=25&word=" wdfield="word" onmousedown="return c({\'fm\':\'tab\',\'tab\':\'video\'})">\xe8\xa7\x86\xe9\xa2\x91</a> <a href="http://map.baidu.com/m?word=&fr=ps01000" wdfield="word" onmousedown="return c({\'fm\':\'tab\',\'tab\':\'map\'})">\xe5\x9c\xb0\xe5\x9b\xbe</a> <a href="http://wenku.baidu.com/search?word=&lm=0&od=0" wdfield="word" onmousedown="return c({\'fm\':\'tab\',\'tab\':\'wenku\'})">\xe6\x96\x87\xe5\xba\x93</a> <a href="//www.baidu.com/more/" onmousedown="return c({\'fm\':\'tab\',\'tab\':\'more\'})">\xe6\x9b\xb4\xe5\xa4\x9a\xc2\xbb</a></div></div><form id="form" name="f" action="/s" class="fm" ><input type="hidden" name="ie" value="utf-8"><input type="hidden" name="f" value="8"><input type="hidden" name="rsv_bp" value="1"><span class="bg s_ipt_wr"><input name="wd" id="kw" class="s_ipt" value="" maxlength="100"></span><span class="bg s_btn_wr"><input type="submit" id="su" value="\xe7\x99\xbe\xe5\xba\xa6\xe4\xb8\x80\xe4\xb8\x8b" class="bg s_btn" onmousedown="this.className=\'bg s_btn s_btn_h\'" onmouseout="this.className=\'bg s_btn\'"></span><span class="tools"><span id="mHolder"><div id="mCon"><span>\xe8\xbe\x93\xe5\x85\xa5\xe6\xb3\x95</span></div><ul id="mMenu"><li><a href="javascript:;" name="ime_hw">\xe6\x89\x8b\xe5\x86\x99</a></li><li><a href="javascript:;" name="ime_py">\xe6\x8b\xbc\xe9\x9f\xb3</a></li><li class="ln"></li><li><a href="javascript:;" name="ime_cl">\xe5\x85\xb3\xe9\x97\xad</a></li></ul></span><span class="shouji"><strong>\xe6\x8e\xa8\xe8\x8d\x90&nbsp;:&nbsp;</strong><a href="http://w.x.baidu.com/go/mini/8/10000020" onmousedown="return ns_c({\'fm\':\'behs\',\'tab\':\'bdbrowser\'})">\xe7\x99\xbe\xe5\xba\xa6\xe6\xb5\x8f\xe8\xa7\x88\xe5\x99\xa8\xef\xbc\x8c\xe6\x89\x93\xe5\xbc\x80\xe7\xbd\x91\xe9\xa1\xb5\xe5\xbf\xab2\xe7\xa7\x92\xef\xbc\x81</a></span></span></form></div><div id="content"><div id="u1"><a href="http://news.baidu.com" name="tj_trnews" class="mnav">\xe6\x96\xb0\xe9\x97\xbb</a><a href="http://www.hao123.com" name="tj_trhao123" class="mnav">hao123</a><a href="http://map.baidu.com" name="tj_trmap" class="mnav">\xe5\x9c\xb0\xe5\x9b\xbe</a><a href="http://v.baidu.com" name="tj_trvideo" class="mnav">\xe8\xa7\x86\xe9\xa2\x91</a><a href="http://tieba.baidu.com" name="tj_trtieba" class="mnav">\xe8\xb4\xb4\xe5\x90\xa7</a><a href="https://passport.baidu.com/v2/?login&tpl=mn&u=http%3A%2F%2Fwww.baidu.com%2F" name="tj_login" id="lb" onclick="return false;">\xe7\x99\xbb\xe5\xbd\x95</a><a href="//www.baidu.com/gaoji/preferences.html" name="tj_settingicon" id="pf">\xe8\xae\xbe\xe7\xbd\xae</a><a href="//www.baidu.com/more/" name="tj_briicon" id="bri">\xe6\x9b\xb4\xe5\xa4\x9a\xe4\xba\xa7\xe5\x93\x81</a></div><div id="m"><p id="lg"><img src="//www.baidu.com/img/bd_logo.png" width="270" height="129"></p><p id="nv"><a href="http://news.baidu.com">\xe6\x96\xb0&nbsp;\xe9\x97\xbb</a>\xe3\x80\x80<b>\xe7\xbd\x91&nbsp;\xe9\xa1\xb5</b>\xe3\x80\x80<a href="http://tieba.baidu.com">\xe8\xb4\xb4&nbsp;\xe5\x90\xa7</a>\xe3\x80\x80<a href="http://zhidao.baidu.com">\xe7\x9f\xa5&nbsp;\xe9\x81\x93</a>\xe3\x80\x80<a href="http://music.baidu.com">\xe9\x9f\xb3&nbsp;\xe4\xb9\x90</a>\xe3\x80\x80<a href="http://image.baidu.com">\xe5\x9b\xbe&nbsp;\xe7\x89\x87</a>\xe3\x80\x80<a href="http://v.baidu.com">\xe8\xa7\x86&nbsp;\xe9\xa2\x91</a>\xe3\x80\x80<a href="http://map.baidu.com">\xe5\x9c\xb0&nbsp;\xe5\x9b\xbe</a></p><div id="fm"><form id="form1" name="f1" action="/s" class="fm"><span class="bg s_ipt_wr"><input type="text" name="wd" id="kw1" maxlength="100" class="s_ipt"></span><input type="hidden" name="rsv_bp" value="0"><input type=hidden name=ch value=""><input type=hidden name=tn value="baidu"><input type=hidden name=bar value=""><input type="hidden" name="rsv_spt" value="3"><input type="hidden" name="ie" value="utf-8"><span class="bg s_btn_wr"><input type="submit" value="\xe7\x99\xbe\xe5\xba\xa6\xe4\xb8\x80\xe4\xb8\x8b" id="su1" class="bg s_btn" onmousedown="this.className=\'bg s_btn s_btn_h\'" onmouseout="this.className=\'bg s_btn\'"></span></form><span class="tools"><span id="mHolder1"><div id="mCon1"><span>\xe8\xbe\x93\xe5\x85\xa5\xe6\xb3\x95</span></div></span></span><ul id="mMenu1"><div class="mMenu1-tip-arrow"><em></em><ins></ins></div><li><a href="javascript:;" name="ime_hw">\xe6\x89\x8b\xe5\x86\x99</a></li><li><a href="javascript:;" name="ime_py">\xe6\x8b\xbc\xe9\x9f\xb3</a></li><li class="ln"></li><li><a href="javascript:;" name="ime_cl">\xe5\x85\xb3\xe9\x97\xad</a></li></ul></div><p id="lk"><a href="http://baike.baidu.com">\xe7\x99\xbe\xe7\xa7\x91</a>\xe3\x80\x80<a href="http://wenku.baidu.com">\xe6\x96\x87\xe5\xba\x93</a>\xe3\x80\x80<a href="http://www.hao123.com">hao123</a><span>&nbsp;|&nbsp;<a href="//www.baidu.com/more/">\xe6\x9b\xb4\xe5\xa4\x9a&gt;&gt;</a></span></p><p id="lm"></p></div></div><div id="ftCon"><div id="ftConw"><p id="lh"><a id="seth" onClick="h(this)" href="/" onmousedown="return ns_c({\'fm\':\'behs\',\'tab\':\'homepage\',\'pos\':0})">\xe6\x8a\x8a\xe7\x99\xbe\xe5\xba\xa6\xe8\xae\xbe\xe4\xb8\xba\xe4\xb8\xbb\xe9\xa1\xb5</a><a id="setf" href="//www.baidu.com/cache/sethelp/index.html" onmousedown="return ns_c({\'fm\':\'behs\',\'tab\':\'favorites\',\'pos\':0})" target="_blank">\xe6\x8a\x8a\xe7\x99\xbe\xe5\xba\xa6\xe8\xae\xbe\xe4\xb8\xba\xe4\xb8\xbb\xe9\xa1\xb5</a><a onmousedown="return ns_c({\'fm\':\'behs\',\'tab\':\'tj_about\'})" href="http://home.baidu.com">\xe5\x85\xb3\xe4\xba\x8e\xe7\x99\xbe\xe5\xba\xa6</a><a onmousedown="return ns_c({\'fm\':\'behs\',\'tab\':\'tj_about_en\'})" href="http://ir.baidu.com">About Baidu</a></p><p id="cp">&copy;2018&nbsp;Baidu&nbsp;<a href="/duty/" name="tj_duty">\xe4\xbd\xbf\xe7\x94\xa8\xe7\x99\xbe\xe5\xba\xa6\xe5\x89\x8d\xe5\xbf\x85\xe8\xaf\xbb</a>&nbsp;\xe4\xba\xacICP\xe8\xaf\x81030173\xe5\x8f\xb7&nbsp;<img src="http://s1.bdstatic.com/r/www/cache/static/global/img/gs_237f015b.gif"></p></div></div><div id="wrapper_wrapper"></div></div><div class="c-tips-container" id="c-tips-container"></div>\r\n<script>window.__async_strategy=2;</script>\r\n<script>var bds={se:{},su:{urdata:[],urSendClick:function(){}},util:{},use:{},comm : {domain:"http://www.baidu.com",ubsurl : "http://sclick.baidu.com/w.gif",tn:"baidu",queryEnc:"",queryId:"",inter:"",templateName:"baidu",sugHost : "http://suggestion.baidu.com/su",query : "",qid : "",cid : "",sid : "",indexSid : "",stoken : "",serverTime : "",user : "",username : "",loginAction : [],useFavo : "",pinyin : "",favoOn : "",curResultNum:"",rightResultExist:false,protectNum:0,zxlNum:0,pageNum:1,pageSize:10,newindex:0,async:1,maxPreloadThread:5,maxPreloadTimes:10,preloadMouseMoveDistance:5,switchAddMask:false,isDebug:false,ishome : 1},_base64:{domain : "http://b1.bdstatic.com/",b64Exp : -1,pdc : 0}};var name,navigate,al_arr=[];var selfOpen = window.open;eval("var open = selfOpen;");var isIE=navigator.userAgent.indexOf("MSIE")!=-1&&!window.opera;var E = bds.ecom= {};bds.se.mon = {\'loadedItems\':[],\'load\':function(){},\'srvt\':-1};try {bds.se.mon.srvt = parseInt(document.cookie.match(new RegExp("(^| )BDSVRTM=([^;]*)(;|$)"))[2]);document.cookie="BDSVRTM=;expires=Sat, 01 Jan 2000 00:00:00 GMT"; }catch(e){}</script>\r\n<script>if(!location.hash.match(/[^a-zA-Z0-9]wd=/)){document.getElementById("ftCon").style.display=\'block\';document.getElementById("u1").style.display=\'block\';document.getElementById("content").style.display=\'block\';document.getElementById("wrapper").style.display=\'block\';setTimeout(function(){try{document.getElementById("kw1").focus();document.getElementById("kw1").parentNode.className += \' iptfocus\';}catch(e){}},0);}</script>\r\n<script type="text/javascript" src="http://s1.bdstatic.com/r/www/cache/static/jquery/jquery-1.10.2.min_f2fb5194.js"></script>\r\n<script>(function(){var index_content = $(\'#content\');var index_foot= $(\'#ftCon\');var index_css= $(\'head [index]\');var index_u= $(\'#u1\');var result_u= $(\'#u\');var wrapper=$("#wrapper");window.index_on=function(){index_css.insertAfter("meta:eq(0)");result_common_css.remove();result_aladdin_css.remove();result_sug_css.remove();index_content.show();index_foot.show();index_u.show();result_u.hide();wrapper.show();if(bds.su&&bds.su.U&&bds.su.U.homeInit){bds.su.U.homeInit();}setTimeout(function(){try{$(\'#kw1\').get(0).focus();window.sugIndex.start();}catch(e){}},0);if(typeof initIndex==\'function\'){initIndex();}};window.index_off=function(){index_css.remove();index_content.hide();index_foot.hide();index_u.hide();result_u.show();result_aladdin_css.insertAfter("meta:eq(0)");result_common_css.insertAfter("meta:eq(0)");result_sug_css.insertAfter("meta:eq(0)");wrapper.show();};})();</script>\r\n<script>window.__switch_add_mask=1;</script>\r\n<script type="text/javascript" src="http://s1.bdstatic.com/r/www/cache/static/global/js/instant_search_newi_redirect1_20bf4036.js"></script>\r\n<script>initPreload();$("#u,#u1").delegate("#lb",\'click\',function(){try{bds.se.login.open();}catch(e){}});if(navigator.cookieEnabled){document.cookie="NOJS=;expires=Sat, 01 Jan 2000 00:00:00 GMT";}</script>\r\n<script>$(function(){for(i=0;i<3;i++){u($($(\'.s_ipt_wr\')[i]),$($(\'.s_ipt\')[i]),$($(\'.s_btn_wr\')[i]),$($(\'.s_btn\')[i]));}function u(iptwr,ipt,btnwr,btn){if(iptwr && ipt){iptwr.on(\'mouseover\',function(){iptwr.addClass(\'ipthover\');}).on(\'mouseout\',function(){iptwr.removeClass(\'ipthover\');}).on(\'click\',function(){ipt.focus();});ipt.on(\'focus\',function(){iptwr.addClass(\'iptfocus\');}).on(\'blur\',function(){iptwr.removeClass(\'iptfocus\');}).on(\'render\',function(e){var $s = iptwr.parent().find(\'.bdsug\');var l = $s.find(\'li\').length;if(l>=5){$s.addClass(\'bdsugbg\');}else{$s.removeClass(\'bdsugbg\');}});}if(btnwr && btn){btnwr.on(\'mouseover\',function(){btn.addClass(\'btnhover\');}).on(\'mouseout\',function(){btn.removeClass(\'btnhover\');});}}});</script>\r\n<script type="text/javascript" src="http://s1.bdstatic.com/r/www/cache/static/home/js/bri_7f1fa703.js"></script>\r\n<script>(function(){var _init=false;window.initIndex=function(){if(_init){return;}_init=true;var w=window,d=document,n=navigator,k=d.f1.wd,a=d.getElementById("nv").getElementsByTagName("a"),isIE=n.userAgent.indexOf("MSIE")!=-1&&!window.opera;(function(){if(/q=([^&]+)/.test(location.search)){k.value=decodeURIComponent(RegExp["\\x241"])}})();(function(){var u = G("u1").getElementsByTagName("a"), nv = G("nv").getElementsByTagName("a"), lk = G("lk").getElementsByTagName("a"), un = "";var tj_nv = ["news","tieba","zhidao","mp3","img","video","map"];var tj_lk = ["baike","wenku","hao123","more"];un = bds.comm.user == "" ? "" : bds.comm.user;function _addTJ(obj){addEV(obj, "mousedown", function(e){var e = e || window.event;var target = e.target || e.srcElement;if(target.name){ns_c({\'fm\':\'behs\',\'tab\':target.name,\'un\':encodeURIComponent(un)});}});}for(var i = 0; i < u.length; i++){_addTJ(u[i]);}for(var i = 0; i < nv.length; i++){nv[i].name = \'tj_\' + tj_nv[i];}for(var i = 0; i < lk.length; i++){lk[i].name = \'tj_\' + tj_lk[i];}})();(function() {var links = {\'tj_news\': [\'word\', \'http://news.baidu.com/ns?tn=news&cl=2&rn=20&ct=1&ie=utf-8\'],\'tj_tieba\': [\'kw\', \'http://tieba.baidu.com/f?ie=utf-8\'],\'tj_zhidao\': [\'word\', \'http://zhidao.baidu.com/search?pn=0&rn=10&lm=0\'],\'tj_mp3\': [\'key\', \'http://music.baidu.com/search?fr=ps&ie=utf-8\'],\'tj_img\': [\'word\', \'http://image.baidu.com/i?ct=201326592&cl=2&nc=1&lm=-1&st=-1&tn=baiduimage&istype=2&fm=&pv=&z=0&ie=utf-8\'],\'tj_video\': [\'word\', \'http://video.baidu.com/v?ct=301989888&s=25&ie=utf-8\'],\'tj_map\': [\'wd\', \'http://map.baidu.com/?newmap=1&ie=utf-8&s=s\'],\'tj_baike\': [\'word\', \'http://baike.baidu.com/search/word?pic=1&sug=1&enc=utf8\'],\'tj_wenku\': [\'word\', \'http://wenku.baidu.com/search?ie=utf-8\']};var domArr = [G(\'nv\'), G(\'lk\'),G(\'cp\')],kw = G(\'kw1\');for (var i = 0, l = domArr.length; i < l; i++) {domArr[i].onmousedown = function(e) {e = e || window.event;var target = e.target || e.srcElement,name = target.getAttribute(\'name\'),items = links[name],reg = new RegExp(\'^\\\\s+|\\\\s+\\x24\'),key = kw.value.replace(reg, \'\');if (items) {if (key.length > 0) {var wd = items[0], url = items[1],url = url + ( name === \'tj_map\' ? encodeURIComponent(\'&\' + wd + \'=\' + key) : ( ( url.indexOf(\'?\') > 0 ? \'&\' : \'?\' ) + wd + \'=\' + encodeURIComponent(key) ) );target.href = url;} else {target.href = target.href.match(new RegExp(\'^http:\\/\\/.+\\.baidu\\.com\'))[0];}}name && ns_c({\'fm\': \'behs\',\'tab\': name,\'query\': encodeURIComponent(key),\'un\': encodeURIComponent(bds.comm.user || \'\') });};}})();};if(window.pageState==0){initIndex();}})();document.cookie = \'IS_STATIC=1;expires=\' + new Date(new Date().getTime() + 10*60*1000).toGMTString();</script>\r\n</body></html>\r\n'
www.cnblogs.com /ssyfj/ b'HTTP/1.1 200 OK\r\nDate: Sun, 24 Jun 2018 10:57:33 GMT\r\nContent-Type: text/html; charset=utf-8\r\nContent-Length: 14922\r\nConnection: close\r\nVary: Accept-Encoding\r\nCache-Control: private, max-age=10\r\nExpires: Sun, 24 Jun 2018 10:57:43 GMT\r\nLast-Modified: Sun, 24 Jun 2018 10:57:33 GMT\r\nX-UA-Compatible: IE=10\r\n\r\n\r\n<!DOCTYPE html>\r\n<html lang="zh-cn">\r\n<head>\r\n<meta charset="utf-8"/>\r\n<meta name="viewport" content="width=device-width, initial-scale=1" />\r\n<title>\xe5\xb1\xb1\xe4\xb8\x8a\xe6\x9c\x89\xe9\xa3\x8e\xe6\x99\xaf - \xe5\x8d\x9a\xe5\xae\xa2\xe5\x9b\xad</title>\r\n<link type="text/css" rel="stylesheet" href="/bundles/blog-common.css?v=-hy83QNg62d4qYibixJzxMJkbf1P9fTBlqv7SK5zVL01"/>\n<link id="MainCss" type="text/css" rel="stylesheet" href="/skins/darkgreentrip/bundle-darkgreentrip.css?v=xPXJVC4GCITs1yYYgSeLkcicCxapqseaPVQLFGMO1wc1"/>\n<link id="mobile-style" media="only screen and (max-width: 767px)" type="text/css" rel="stylesheet" href="/skins/darkgreentrip/bundle-darkgreentrip-mobile.css?v=6NcJHqsIyaE4w19VtgFvCFahrnr2rYCTRRTdxlMDhhQ1"/>\r\n<link title="RSS" type="application/rss+xml" rel="alternate" href="http://www.cnblogs.com/ssyfj/rss"/>\r\n<link title="RSD" type="application/rsd+xml" rel="EditURI" href="http://www.cnblogs.com/ssyfj/rsd.xml"/>\n<link type="application/wlwmanifest+xml" rel="wlwmanifest" href="http://www.cnblogs.com/ssyfj/wlwmanifest.xml"/>\r\n<script src="//common.cnblogs.com/scripts/jquery-2.2.0.min.js"></script>\r\n<script type="text/javascript">var currentBlogApp = \'ssyfj\', cb_enable_mathjax=false;var isLogined=false;</script>\r\n<script src="/bundles/blog-common.js?v=hrXhVUZRBrM1QWdCTm1D-5NdRKBmg-PqI2KBNh-fiD41" type="text/javascript"></script>\r\n</head>\r\n<body>\r\n<a name="top"></a>\r\n\r\n<!--done-->\r\n<div id="home">\r\n<div id="header">\r\n\t<div id="blogTitle">\r\n\t<a id="lnkBlogLogo" href="http://www.cnblogs.com/ssyfj/"><img id="blogLogo" src="/Skins/custom/images/logo.gif" alt="\xe8\xbf\x94\xe5\x9b\x9e\xe4\xb8\xbb\xe9\xa1\xb5" /></a>\t\t\t\r\n\t\t\r\n<!--done-->\r\n<h1><a id="Header1_HeaderTitle" class="headermaintitle" href="http://www.cnblogs.com/ssyfj/">\xe5\xb1\xb1\xe4\xb8\x8a\xe6\x9c\x89\xe9\xa3\x8e\xe6\x99\xaf</a></h1>\r\n<h2>\xe5\x91\xa8\xe5\x9b\xb4\xe7\x9a\x84\xe4\xba\xba\xe9\x83\xbd\xe6\xaf\x94\xe4\xbd\xa0\xe5\x8e\x89\xe5\xae\xb3\xef\xbc\x8c\xe4\xbd\xa0\xe6\x89\x8d\xe4\xbc\x9a\xe6\x85\xa2\xe6\x85\xa2\xe5\x8f\x98\xe5\xbc\xba</h2>\r\n\r\n\r\n\r\n\t\t\r\n\t</div><!--end: blogTitle \xe5\x8d\x9a\xe5\xae\xa2\xe7\x9a\x84\xe6\xa0\x87\xe9\xa2\x98\xe5\x92\x8c\xe5\x89\xaf\xe6\xa0\x87\xe9\xa2\x98 -->\r\n\t<div id="navigator">\r\n\t\t\r\n<ul id="navList">\r\n<li><a id="blog_nav_sitehome" class="menu" href="http://www.cnblogs.com/">\xe5\x8d\x9a\xe5\xae\xa2\xe5\x9b\xad</a></li>\r\n<li><a id="blog_nav_myhome" class="menu" href="http://www.cnblogs.com/ssyfj/">\xe9\xa6\x96\xe9\xa1\xb5</a></li>\r\n<li><a id="blog_nav_newpost" class="menu" rel="nofollow" href="https://i.cnblogs.com/EditPosts.aspx?opt=1">\xe6\x96\xb0\xe9\x9a\x8f\xe7\xac\x94</a></li>\r\n<li><a id="blog_nav_contact" class="menu" rel="nofollow" href="https://msg.cnblogs.com/send/%E5%B1%B1%E4%B8%8A%E6%9C%89%E9%A3%8E%E6%99%AF">\xe8\x81\x94\xe7\xb3\xbb</a></li>\r\n<li><a id="blog_nav_rss" class="menu" href="http://www.cnblogs.com/ssyfj/rss">\xe8\xae\xa2\xe9\x98\x85</a>\r\n<!--<a id="blog_nav_rss_image" class="aHeaderXML" href="http://www.cnblogs.com/ssyfj/rss"><img src="//www.cnblogs.com/images/xml.gif" alt="\xe8\xae\xa2\xe9\x98\x85" /></a>--></li>\r\n<li><a id="blog_nav_admin" class="menu" rel="nofollow" href="https://i.cnblogs.com/">\xe7\xae\xa1\xe7\x90\x86</a></li>\r\n</ul>\r\n\t\t<div class="blogStats">\r\n\t\t\t\r\n\t\t\t<div id="blog_stats">\r\n<span id="stats_post_count">\xe9\x9a\x8f\xe7\xac\x94 - 165&nbsp; </span>\r\n<span id="stats_article_count">\xe6\x96\x87\xe7\xab\xa0 - 0&nbsp; </span>\r\n<span id="stats-comment_count">\xe8\xaf\x84\xe8\xae\xba - 0</span>\r\n</div>\r\n\t\t\t\r\n\t\t</div><!--end: blogStats -->\r\n\t</div><!--end: navigator \xe5\x8d\x9a\xe5\xae\xa2\xe5\xaf\xbc\xe8\x88\xaa\xe6\xa0\x8f -->\r\n</div><!--end: header \xe5\xa4\xb4\xe9\x83\xa8 -->\r\n\r\n<div id="main">\r\n\t<div id="mainContent">\r\n\t<div class="forFlow">\r\n\t\t\r\n\r\n<!--done-->\r\n\r\n\r\n<div class="day">\r\n\t<div class="dayTitle">\r\n\t\t<a id="homepage1_HomePageDays_DaysList_ctl00_ImageLink" href="//www.cnblogs.com/ssyfj/archive/2018/06/24.html">2018\xe5\xb9\xb46\xe6\x9c\x8824\xe6\x97\xa5</a>\t\t\t\t \r\n\t</div>\r\n\r\n\t\r\n\t\t\t<div class="postTitle">\r\n\t\t\t\t<a id="homepage1_HomePageDays_DaysList_ctl00_DayList_TitleUrl_0" class="postTitle2" href="https://www.cnblogs.com/ssyfj/p/9219360.html">python---\xe5\xbc\x82\xe6\xad\xa5IO(asyncio)\xe5\x8d\x8f\xe7\xa8\x8b</a>\r\n\t\t\t</div>\r\n\t\t\t<div class="postCon"><div class="c_b_p_desc">\xe6\x91\x98\xe8\xa6\x81: \xe7\xae\x80\xe5\x8d\x95\xe4\xba\x86\xe8\xa7\xa3 \xe5\x9c\xa8py3\xe4\xb8\xad\xe5\x86\x85\xe7\xbd\xae\xe4\xba\x86asyncio\xe6\xa8\xa1\xe5\x9d\x97\xe3\x80\x82\xe5\x85\xb6\xe7\xbc\x96\xe7\xa8\x8b\xe6\xa8\xa1\xe5\x9e\x8b\xe5\xb0\xb1\xe6\x98\xaf\xe4\xb8\x80\xe4\xb8\xaa\xe6\xb6\x88\xe6\x81\xaf\xe5\xbe\xaa\xe7\x8e\xaf\xe3\x80\x82 \xe6\xa8\xa1\xe5\x9d\x97\xe6\x9f\xa5\xe7\x9c\x8b\xef\xbc\x9a \xe8\xb0\x83\xe7\x94\xa8\xe6\xad\xa5\xe9\xaa\xa4\xef\xbc\x9a \xe7\xae\x80\xe5\x8d\x95\xe4\xbd\xbf\xe7\x94\xa8\xef\xbc\x9a 1 before func1 2 before func1 1 after func1 2 after func1 5.00528621673584 \xe5\xae\x9a\xe4\xb9\x89\xe4\xb8\x80\xe4\xb8\xaa\xe5\x8d\x8f\xe7\xa8\x8b\xef\xbc\x88\xe4\xb8\x8d\xe5\x90\x8c\xe4\xba\x8e\xe4\xb8\x8a\xe9\x9d\xa2\xe7\x9a\x84\xe5\xae\x9e\xe4\xbe\x8b\xef\xbc\x89 D:<a href="https://www.cnblogs.com/ssyfj/p/9219360.html" class="c_b_p_desc_readmore">\xe9\x98\x85\xe8\xaf\xbb\xe5\x85\xa8\xe6\x96\x87</a></div></div>\r\n\t\t\t<div class="clear"></div>\r\n\t\t\t<div class="postDesc">posted @ 2018-06-24 16:28 \xe5\xb1\xb1\xe4\xb8\x8a\xe6\x9c\x89\xe9\xa3\x8e\xe6\x99\xaf \xe9\x98\x85\xe8\xaf\xbb(4) \xe8\xaf\x84\xe8\xae\xba(0) <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=9219360" rel="nofollow">\xe7\xbc\x96\xe8\xbe\x91</a></div>\r\n\t\t\t<div class="clear"></div>\r\n\t\t\r\n</div>\r\n\r\n\r\n<div class="day">\r\n\t<div class="dayTitle">\r\n\t\t<a id="homepage1_HomePageDays_DaysList_ctl01_ImageLink" href="//www.cnblogs.com/ssyfj/archive/2018/06/23.html">2018\xe5\xb9\xb46\xe6\x9c\x8823\xe6\x97\xa5</a>\t\t\t\t \r\n\t</div>\r\n\r\n\t\r\n\t\t\t<div class="postTitle">\r\n\t\t\t\t<a id="homepage1_HomePageDays_DaysList_ctl01_DayList_TitleUrl_0" class="postTitle2" href="https://www.cnblogs.com/ssyfj/p/9219257.html">python---await/async\xe5\x85\xb3\xe9\x94\xae\xe5\xad\x97</a>\r\n\t\t\t</div>\r\n\t\t\t<div class="postCon"><div class="c_b_p_desc">\xe6\x91\x98\xe8\xa6\x81: \xe6\x8e\xa8\xe6\x96\x87\xef\xbc\x9a\xe7\x8e\xa9\xe8\xbd\xac Python 3.5 \xe7\x9a\x84 await/async \xe9\xa6\x96\xe5\x85\x88\xe7\x9c\x8b\xe6\xad\xa3\xe5\xb8\xb8\xe7\x9a\x84\xe4\xb8\xa4\xe4\xb8\xaa\xe5\x87\xbd\xe6\x95\xb0\xe4\xb9\x8b\xe9\x97\xb4\xe7\x9a\x84\xe6\x89\xa7\xe8\xa1\x8c \xe6\x97\xa0\xe6\xb3\x95\xe5\xae\x9e\xe7\x8e\xb0\xe4\xb8\xa4\xe4\xb8\xaa\xe5\x87\xbd\xe6\x95\xb0\xe4\xb9\x8b\xe9\x97\xb4\xe7\x9a\x84\xe4\xba\xa4\xe4\xba\x92\xe3\x80\x82 \xe5\xb0\x86\xe8\xbf\x99\xe4\xb8\xa4\xe4\xb8\xaa\xe5\x87\xbd\xe6\x95\xb0\xe8\xae\xbe\xe7\xbd\xae\xe4\xb8\xba\xe5\x8d\x8f\xe7\xa8\x8b\xef\xbc\x8c\xe5\x8a\xa0\xe4\xb8\x8aasync\xe5\x85\xb3\xe9\x94\xae\xe5\xad\x97 \xe9\x82\xa3\xe4\xb9\x88\xef\xbc\x8c\xe4\xb8\xba\xe4\xbb\x80\xe4\xb9\x88\xe8\xa6\x81\xe6\x9c\x89\xe4\xb8\x80\xe4\xb8\xaa\xe5\x8d\x8f\xe7\xa8\x8b\xe5\xaf\xb9\xe8\xb1\xa1\xef\xbc\x9f\xe4\xbb\xa3\xe7\xa0\x81\xe5\x88\xb0\xe5\xba\x95\xe5\xa6\x82\xe4\xbd\x95\xe6\x89\xa7\xe8\xa1\x8c\xef\xbc\x9f \xe5\x85\xb3\xe9\x94\xae\xe4\xb9\x8b\xe5\xa4\x84\xe6\x98\xaf\xe5\x8d\x8f\xe7\xa8\x8b\xe7\xa1\xae\xe5\xae\x9e\xe6\x98\xaf\xe4\xb8\x8e Python \xe7\x9a\x84\xe7\x94\x9f\xe6\x88\x90\xe5\x99\xa8\xe9\x9d\x9e\xe5\xb8\xb8\xe7\x9b\xb8\xe4\xbc\xbc\xef\xbc\x8c\xe4\xb9\x9f\xe9\x83\xbd\xe6\x9c\x89\xe4\xb8\x80\xe4\xb8\xaa send \xe6\x96\xb9<a href="https://www.cnblogs.com/ssyfj/p/9219257.html" class="c_b_p_desc_readmore">\xe9\x98\x85\xe8\xaf\xbb\xe5\x85\xa8\xe6\x96\x87</a></div></div>\r\n\t\t\t<div class="clear"></div>\r\n\t\t\t<div class="postDesc">posted @ 2018-06-23 23:28 \xe5\xb1\xb1\xe4\xb8\x8a\xe6\x9c\x89\xe9\xa3\x8e\xe6\x99\xaf \xe9\x98\x85\xe8\xaf\xbb(7) \xe8\xaf\x84\xe8\xae\xba(0) <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=9219257" rel="nofollow">\xe7\xbc\x96\xe8\xbe\x91</a></div>\r\n\t\t\t<div class="clear"></div>\r\n\t\t\r\n\t\t\t<div class="postSeparator"></div>\r\n\t\t\r\n\t\t\t<div class="postTitle">\r\n\t\t\t\t<a id="homepage1_HomePageDays_DaysList_ctl01_DayList_TitleUrl_1" class="postTitle2" href="https://www.cnblogs.com/ssyfj/p/9218730.html">python---\xe5\x8d\x8f\xe7\xa8\x8b\xe7\x90\x86\xe8\xa7\xa3</a>\r\n\t\t\t</div>\r\n\t\t\t<div class="postCon"><div class="c_b_p_desc">\xe6\x91\x98\xe8\xa6\x81: \xe6\x8e\xa8\xe6\x96\x87\xef\xbc\x9apython \xe5\x9f\xba\xe7\xa1\x80\xe7\x9f\xa5\xe8\xaf\x86\xe5\x9b\x9e\xe9\xa1\xbe\xef\xbc\x88\xe4\xb8\x83\xef\xbc\x89\xe8\xbf\xad\xe4\xbb\xa3\xe5\x99\xa8\xe5\x92\x8c\xe7\x94\x9f\xe6\x88\x90\xe5\x99\xa8 \xe6\x8e\xa8\xe6\x96\x87\xef\xbc\x9aPython\xe5\x8d\x8f\xe7\xa8\x8b\xe6\xb7\xb1\xe5\x85\xa5\xe7\x90\x86\xe8\xa7\xa3\xef\xbc\x88\xe6\x9c\xac\xe6\x96\x87\xe8\xbd\xac\xe8\xbd\xbd\xe4\xba\x8e\xe8\xaf\xa5\xe6\x96\x87\xe7\xab\xa0\xef\xbc\x89 \xe4\xbb\x8e\xe8\xaf\xad\xe6\xb3\x95\xe4\xb8\x8a\xe6\x9d\xa5\xe7\x9c\x8b\xef\xbc\x8c\xe5\x8d\x8f\xe7\xa8\x8b\xe5\x92\x8c\xe7\x94\x9f\xe6\x88\x90\xe5\x99\xa8\xe7\xb1\xbb\xe4\xbc\xbc\xef\xbc\x8c\xe9\x83\xbd\xe6\x98\xaf\xe5\xae\x9a\xe4\xb9\x89\xe4\xbd\x93\xe4\xb8\xad\xe5\x8c\x85\xe5\x90\xabyield\xe5\x85\xb3\xe9\x94\xae\xe5\xad\x97\xe7\x9a\x84\xe5\x87\xbd\xe6\x95\xb0\xe3\x80\x82yield\xe5\x9c\xa8\xe5\x8d\x8f\xe7\xa8\x8b\xe4\xb8\xad\xe7\x9a\x84\xe7\x94\xa8\xe6\xb3\x95\xef\xbc\x9a \xe5\x9c\xa8\xe5\x8d\x8f\xe7\xa8\x8b\xe4\xb8\xadyield\xe9\x80\x9a\xe5\xb8\xb8\xe5\x87\xba\xe7\x8e\xb0\xe5\x9c\xa8\xe8\xa1\xa8\xe8\xbe\xbe\xe5\xbc\x8f\xe7\x9a\x84\xe5\x8f\xb3\xe8\xbe\xb9\xef\xbc\x8c\xe4\xbe\x8b\xe5\xa6\x82\xef\xbc\x9adatum = yield,\xe5\x8f\xaf\xe4\xbb\xa5\xe4\xba\xa7\xe5\x87\xba\xe5\x80\xbc\xef\xbc\x8c\xe4\xb9\x9f\xe5\x8f\xaf\xe4\xbb\xa5<a href="https://www.cnblogs.com/ssyfj/p/9218730.html" class="c_b_p_desc_readmore">\xe9\x98\x85\xe8\xaf\xbb\xe5\x85\xa8\xe6\x96\x87</a></div></div>\r\n\t\t\t<div class="clear"></div>\r\n\t\t\t<div class="postDesc">posted @ 2018-06-23 20:09 \xe5\xb1\xb1\xe4\xb8\x8a\xe6\x9c\x89\xe9\xa3\x8e\xe6\x99\xaf \xe9\x98\x85\xe8\xaf\xbb(8) \xe8\xaf\x84\xe8\xae\xba(0) <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=9218730" rel="nofollow">\xe7\xbc\x96\xe8\xbe\x91</a></div>\r\n\t\t\t<div class="clear"></div>\r\n\t\t\r\n</div>\r\n\r\n\r\n<div class="day">\r\n\t<div class="dayTitle">\r\n\t\t<a id="homepage1_HomePageDays_DaysList_ctl02_ImageLink" href="//www.cnblogs.com/ssyfj/archive/2018/06/21.html">2018\xe5\xb9\xb46\xe6\x9c\x8821\xe6\x97\xa5</a>\t\t\t\t \r\n\t</div>\r\n\r\n\t\r\n\t\t\t<div class="postTitle">\r\n\t\t\t\t<a id="homepage1_HomePageDays_DaysList_ctl02_DayList_TitleUrl_0" class="postTitle2" href="https://www.cnblogs.com/ssyfj/p/9210725.html">python---web\xe5\xbe\xae\xe4\xbf\xa1\xe5\xbc\x80\xe5\x8f\x91</a>\r\n\t\t\t</div>\r\n\t\t\t<div class="postCon"><div class="c_b_p_desc">\xe6\x91\x98\xe8\xa6\x81: \xe4\xb8\x80\xef\xbc\x9a\xe8\xbd\xae\xe8\xaf\xa2\xef\xbc\x8c\xe9\x95\xbf\xe8\xbd\xae\xe8\xaf\xa2\xef\xbc\x8cWebSocket\xe4\xba\x86\xe8\xa7\xa3 \xe8\xbd\xae\xe8\xaf\xa2\xef\xbc\x9a \xe9\x95\xbf\xe8\xbd\xae\xe8\xaf\xa2\xef\xbc\x9a WebSocket\xef\xbc\x9a \xe4\xba\x8c\xef\xbc\x9aweb\xe5\xbe\xae\xe4\xbf\xa1\xe6\xb5\x81\xe7\xa8\x8b\xe4\xbb\x8b\xe7\xbb\x8d \xe4\xb8\x89\xef\xbc\x9a\xe5\xbe\xae\xe4\xbf\xa1\xe7\x99\xbb\xe5\xbd\x95\xe5\xbc\x80\xe5\x8f\x91 \xe7\x99\xbb\xe5\xbd\x95\xe8\xa7\x86\xe5\x9b\xbelogin\xef\xbc\x8c\xe7\x94\xa8\xe4\xba\x8e\xe6\x98\xbe\xe7\xa4\xba\xe4\xba\x8c\xe7\xbb\xb4\xe7\xa0\x81 check_login\xe7\x94\xa8\xe4\xba\x8e\xe6\xa3\x80\xe6\xb5\x8b\xe7\x99\xbb\xe5\xbd\x95\xe7\x8a\xb6\xe6\x80\x81\xef\xbc\x9a408\xe6\x9c\xaa\xe6\x89\xab\xe6\x8f\x8f\xef\xbc\x8c201\xe6\x89\xab\xe6\x8f\x8f\xe4\xba\x8c\xe7\xbb\xb4\xe7\xa0\x81\xe4\xbd\x86\xe6\x98\xaf\xe6\x9c\xaa\xe7\x99\xbb\xe5\xbd\x95\xef\xbc\x8c200\xe7\x82\xb9\xe5\x87\xbb\xe7\x99\xbb\xe5\xbd\x95 ''' \xe6\x96\xb0\xe8\xaf\xb7\xe6\xb1\x82 GET \xe8\x8e\xb7\xe5\x8f\x96\xe8\xb7\xb3\xe8\xbd\xac\xe5\x9c\xb0\xe5\x9d\x80red<a href="https://www.cnblogs.com/ssyfj/p/9210725.html" class="c_b_p_desc_readmore">\xe9\x98\x85\xe8\xaf\xbb\xe5\x85\xa8\xe6\x96\x87</a></div></div>\r\n\t\t\t<div class="clear"></div>\r\n\t\t\t<div class="postDesc">posted @ 2018-06-21 23:33 \xe5\xb1\xb1\xe4\xb8\x8a\xe6\x9c\x89\xe9\xa3\x8e\xe6\x99\xaf \xe9\x98\x85\xe8\xaf\xbb(13) \xe8\xaf\x84\xe8\xae\xba(0) <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=9210725" rel="nofollow">\xe7\xbc\x96\xe8\xbe\x91</a></div>\r\n\t\t\t<div class="clear"></div>\r\n\t\t\r\n</div>\r\n\r\n\r\n<div class="day">\r\n\t<div class="dayTitle">\r\n\t\t<a id="homepage1_HomePageDays_DaysList_ctl03_ImageLink" href="//www.cnblogs.com/ssyfj/archive/2018/06/19.html">2018\xe5\xb9\xb46\xe6\x9c\x8819\xe6\x97\xa5</a>\t\t\t\t \r\n\t</div>\r\n\r\n\t\r\n\t\t\t<div class="postTitle">\r\n\t\t\t\t<a id="homepage1_HomePageDays_DaysList_ctl03_DayList_TitleUrl_0" class="postTitle2" href="https://www.cnblogs.com/ssyfj/p/9200602.html">python---requests\xe5\x92\x8cbeautifulsoup4\xe6\xa8\xa1\xe5\x9d\x97\xe7\x9a\x84\xe4\xbd\xbf\xe7\x94\xa8</a>\r\n\t\t\t</div>\r\n\t\t\t<div class="postCon"><div class="c_b_p_desc">\xe6\x91\x98\xe8\xa6\x81: Requests\xef\xbc\x9a\xe6\x98\xaf\xe4\xbd\xbf\xe7\x94\xa8 Apache2 Licensed \xe8\xae\xb8\xe5\x8f\xaf\xe8\xaf\x81\xe7\x9a\x84 \xe5\x9f\xba\xe4\xba\x8ePython\xe5\xbc\x80\xe5\x8f\x91\xe7\x9a\x84HTTP \xe5\xba\x93\xef\xbc\x8c\xe5\x85\xb6\xe5\x9c\xa8Python\xe5\x86\x85\xe7\xbd\xae\xe6\xa8\xa1\xe5\x9d\x97\xe7\x9a\x84\xe5\x9f\xba\xe7\xa1\x80\xe4\xb8\x8a\xe8\xbf\x9b\xe8\xa1\x8c\xe4\xba\x86\xe9\xab\x98\xe5\xba\xa6\xe7\x9a\x84\xe5\xb0\x81\xe8\xa3\x85\xef\xbc\x8c\xe4\xbb\x8e\xe8\x80\x8c\xe4\xbd\xbf\xe5\xbe\x97Pythoner\xe8\xbf\x9b\xe8\xa1\x8c\xe7\xbd\x91\xe7\xbb\x9c\xe8\xaf\xb7\xe6\xb1\x82\xe6\x97\xb6\xef\xbc\x8c\xe5\x8f\x98\xe5\xbe\x97\xe7\xbe\x8e\xe5\xa5\xbd\xe4\xba\x86\xe8\xae\xb8\xe5\xa4\x9a\xef\xbc\x8c\xe4\xbd\xbf\xe7\x94\xa8Requests\xe5\x8f\xaf\xe4\xbb\xa5\xe8\xbd\xbb\xe8\x80\x8c\xe6\x98\x93\xe4\xb8\xbe\xe7\x9a\x84\xe5\xae\x8c\xe6\x88\x90\xe6\xb5\x8f\xe8\xa7\x88\xe5\x99\xa8\xe5\x8f\xaf\xe6\x9c\x89\xe7\x9a\x84\xe4\xbb\xbb\xe4\xbd\x95\xe6\x93\x8d\xe4\xbd\x9c\xe3\x80\x82 BeautifulSoup<a href="https://www.cnblogs.com/ssyfj/p/9200602.html" class="c_b_p_desc_readmore">\xe9\x98\x85\xe8\xaf\xbb\xe5\x85\xa8\xe6\x96\x87</a></div></div>\r\n\t\t\t<div class="clear"></div>\r\n\t\t\t<div class="postDesc">posted @ 2018-06-19 18:42 \xe5\xb1\xb1\xe4\xb8\x8a\xe6\x9c\x89\xe9\xa3\x8e\xe6\x99\xaf \xe9\x98\x85\xe8\xaf\xbb(14) \xe8\xaf\x84\xe8\xae\xba(0) <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=9200602" rel="nofollow">\xe7\xbc\x96\xe8\xbe\x91</a></div>\r\n\t\t\t<div class="clear"></div>\r\n\t\t\r\n\t\t\t<div class="postSeparator"></div>\r\n\t\t\r\n\t\t\t<div class="postTitle">\r\n\t\t\t\t<a id="homepage1_HomePageDays_DaysList_ctl03_DayList_TitleUrl_1" class="postTitle2" href="https://www.cnblogs.com/ssyfj/p/9198020.html">python---RabbitMQ\xef\xbc\x885\xef\xbc\x89\xe6\xb6\x88\xe6\x81\xafRPC\xef\xbc\x88\xe8\xbf\x9c\xe7\xa8\x8b\xe8\xbf\x87\xe7\xa8\x8b\xe8\xb0\x83\xe7\x94\xa8\xef\xbc\x89</a>\r\n\t\t\t</div>\r\n\t\t\t<div class="postCon"><div class="c_b_p_desc">\xe6\x91\x98\xe8\xa6\x81: \xe6\x9c\x8d\xe5\x8a\xa1\xe5\x99\xa8\xe7\xab\xaf\xef\xbc\x9a \xe5\xae\xa2\xe6\x88\xb7\xe7\xab\xaf\xef\xbc\x9a \xe6\xb3\xa8\xe6\x84\x8f\xef\xbc\x9a self.connection.process_data_events()\xe4\xbc\x9a\xe5\x8e\xbb\xe9\x98\x9f\xe5\x88\x97\xe4\xb8\xad\xe8\x8e\xb7\xe5\x8f\x96\xe5\xa4\x84\xe7\x90\x86\xe6\x95\xb0\xe6\x8d\xae\xe4\xba\x8b\xe4\xbb\xb6\xef\xbc\x8c\xe5\xbd\x93\xe6\x95\xb0\xe6\x8d\xae\xe6\x9d\xa5\xe4\xb8\xb4\xe7\x9a\x84\xe6\x97\xb6\xe5\x80\x99\xef\xbc\x8c\xe4\xbc\x9a\xe7\x9b\xb4\xe6\x8e\xa5\xe5\x8e\xbb\xe8\xb0\x83\xe7\x94\xa8\xe5\x9b\x9e\xe8\xb0\x83\xe5\x87\xbd\xe6\x95\xb0\xe5\x8e\xbb\xe5\xa4\x84\xe7\x90\x86\xe6\x95\xb0\xe6\x8d\xae<a href="https://www.cnblogs.com/ssyfj/p/9198020.html" class="c_b_p_desc_readmore">\xe9\x98\x85\xe8\xaf\xbb\xe5\x85\xa8\xe6\x96\x87</a></div></div>\r\n\t\t\t<div class="clear"></div>\r\n\t\t\t<div class="postDesc">posted @ 2018-06-19 12:22 \xe5\xb1\xb1\xe4\xb8\x8a\xe6\x9c\x89\xe9\xa3\x8e\xe6\x99\xaf \xe9\x98\x85\xe8\xaf\xbb(3) \xe8\xaf\x84\xe8\xae\xba(0) <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=9198020" rel="nofollow">\xe7\xbc\x96\xe8\xbe\x91</a></div>\r\n\t\t\t<div class="clear"></div>\r\n\t\t\r\n</div>\r\n\r\n\r\n<div class="day">\r\n\t<div class="dayTitle">\r\n\t\t<a id="homepage1_HomePageDays_DaysList_ctl04_ImageLink" href="//www.cnblogs.com/ssyfj/archive/2018/06/16.html">2018\xe5\xb9\xb46\xe6\x9c\x8816\xe6\x97\xa5</a>\t\t\t\t \r\n\t</div>\r\n\r\n\t\r\n\t\t\t<div class="postTitle">\r\n\t\t\t\t<a id="homepage1_HomePageDays_DaysList_ctl04_DayList_TitleUrl_0" class="postTitle2" href="https://www.cnblogs.com/ssyfj/p/9191756.html">restful api</a>\r\n\t\t\t</div>\r\n\t\t\t<div class="postCon"><div class="c_b_p_desc">\xe6\x91\x98\xe8\xa6\x81: RESTful API \xe8\xae\xbe\xe8\xae\xa1\xe6\x8c\x87\xe5\x8d\x97 \xe7\x90\x86\xe8\xa7\xa3RESTful\xe6\x9e\xb6\xe6\x9e\x84 \xe7\x90\x86\xe8\xa7\xa3\xe6\x9c\xac\xe7\x9c\x9f\xe7\x9a\x84REST\xe6\x9e\xb6\xe6\x9e\x84\xe9\xa3\x8e\xe6\xa0\xbc Python \xe4\xb9\x8b\xe8\xb7\xaf\xef\xbc\x8cRestful API\xe8\xae\xbe\xe8\xae\xa1\xe8\xa7\x84\xe8\x8c\x83 python \xe4\xb9\x8b\xe8\xb7\xaf\xef\xbc\x8cDjango rest framework \xe5\x88\x9d\xe6\x8e\xa2 Django-rest-frameworl\xe7\x9a\x84\xe4\xbd\xbf\xe7\x94\xa8 1.djangorestframework<a href="https://www.cnblogs.com/ssyfj/p/9191756.html" class="c_b_p_desc_readmore">\xe9\x98\x85\xe8\xaf\xbb\xe5\x85\xa8\xe6\x96\x87</a></div></div>\r\n\t\t\t<div class="clear"></div>\r\n\t\t\t<div class="postDesc">posted @ 2018-06-16 23:26 \xe5\xb1\xb1\xe4\xb8\x8a\xe6\x9c\x89\xe9\xa3\x8e\xe6\x99\xaf \xe9\x98\x85\xe8\xaf\xbb(3) \xe8\xaf\x84\xe8\xae\xba(0) <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=9191756" rel="nofollow">\xe7\xbc\x96\xe8\xbe\x91</a></div>\r\n\t\t\t<div class="clear"></div>\r\n\t\t\r\n\t\t\t<div class="postSeparator"></div>\r\n\t\t\r\n\t\t\t<div class="postTitle">\r\n\t\t\t\t<a id="homepage1_HomePageDays_DaysList_ctl04_DayList_TitleUrl_1" class="postTitle2" href="https://www.cnblogs.com/ssyfj/p/9189422.html">Git\xe5\x92\x8cGithub\xe5\x85\xa5\xe9\x97\xa8</a>\r\n\t\t\t</div>\r\n\t\t\t<div class="postCon"><div class="c_b_p_desc">\xe6\x91\x98\xe8\xa6\x81: \xe6\x8e\xa8\xe6\x96\x87\xef\xbc\x9a\xe5\xae\x98\xe6\x96\xb9\xe6\x89\x8b\xe5\x86\x8c\xef\xbc\x8c\xe5\x8d\x81\xe5\x88\x86\xe8\xaf\xa6\xe7\xbb\x86 \xe6\x8e\xa8\xe6\x96\x87\xef\xbc\x9agit\xe5\x92\x8cgithub\xe5\xbf\xab\xe9\x80\x9f\xe5\x85\xa5\xe9\x97\xa8 \xe4\xb8\x80.git\xe4\xbd\xbf\xe7\x94\xa8 1.git\xe5\xae\x89\xe8\xa3\x85 \xef\xbc\x881\xef\xbc\x89windows \xe7\xbd\x91\xe7\xab\x99\xef\xbc\x9ahttps://git-scm.com/download/win\xe4\xb8\x8b\xe8\xbd\xbd\xe5\xae\x89\xe8\xa3\x85\xe5\x8d\xb3\xe5\x8f\xaf \xef\xbc\x882\xef\xbc\x89linux\xe5\xae\x89\xe8\xa3\x85 2.\xe7\x89\x88\xe6\x9c\xac\xe5\xba\x93\xe5\x88\x9b\xe5\xbb\xba \xef\xbc\x881\xef\xbc\x89\xe5\x88\x9b\xe5\xbb\xba\xe9\xa1\xb9\xe7\x9b\xae\xe7\x9b\xae\xe5\xbd\x95 \xef\xbc\x882\xef\xbc\x89\xe7\x89\x88\xe6\x9c\xac\xe5\xba\x93\xe5\x88\x9b\xe5\xbb\xba \xef\xbc\x883\xef\xbc\x89\xe5\x88\x9b\xe5\xbb\xba\xe4\xb8\x80\xe4\xb8\xaa\xe6\x96\x87\xe4\xbb\xb6\xef\xbc\x8c\xe5\xb0\x86\xe6\x96\x87<a href="https://www.cnblogs.com/ssyfj/p/9189422.html" class="c_b_p_desc_readmore">\xe9\x98\x85\xe8\xaf\xbb\xe5\x85\xa8\xe6\x96\x87</a></div></div>\r\n\t\t\t<div class="clear"></div>\r\n\t\t\t<div class="postDesc">posted @ 2018-06-16 00:03 \xe5\xb1\xb1\xe4\xb8\x8a\xe6\x9c\x89\xe9\xa3\x8e\xe6\x99\xaf \xe9\x98\x85\xe8\xaf\xbb(3) \xe8\xaf\x84\xe8\xae\xba(0) <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=9189422" rel="nofollow">\xe7\xbc\x96\xe8\xbe\x91</a></div>\r\n\t\t\t<div class="clear"></div>\r\n\t\t\r\n</div>\r\n\r\n\r\n<div class="day">\r\n\t<div class="dayTitle">\r\n\t\t<a id="homepage1_HomePageDays_DaysList_ctl05_ImageLink" href="//www.cnblogs.com/ssyfj/archive/2018/06/13.html">2018\xe5\xb9\xb46\xe6\x9c\x8813\xe6\x97\xa5</a>\t\t\t\t \r\n\t</div>\r\n\r\n\t\r\n\t\t\t<div class="postTitle">\r\n\t\t\t\t<a id="homepage1_HomePageDays_DaysList_ctl05_DayList_TitleUrl_0" class="postTitle2" href="https://www.cnblogs.com/ssyfj/p/9179587.html">linux\xe4\xb8\x8b\xe5\xae\x89\xe8\xa3\x85shellinabox\xe5\xae\x9e\xe7\x8e\xb0web\xe7\x99\xbb\xe5\xbd\x95\xe6\x9c\x8d\xe5\x8a\xa1\xe5\x99\xa8</a>\r\n\t\t\t</div>\r\n\t\t\t<div class="postCon"><div class="c_b_p_desc">\xe6\x91\x98\xe8\xa6\x81: GitHub\xe5\x9c\xb0\xe5\x9d\x80\xef\xbc\x88\xe5\x90\xab\xe6\x9c\x89\xe6\x96\x87\xe4\xbb\xb6\xe4\xb8\x8b\xe8\xbd\xbd\xe5\x92\x8c\xe8\xaf\xa6\xe7\xbb\x86\xe5\xae\x89\xe8\xa3\x85\xe6\xb5\x81\xe7\xa8\x8b\xef\xbc\x89\xef\xbc\x9ahttps://github.com/shellinabox/shellinabox \xe8\xbf\x99\xe9\x87\x8c\xe6\x88\x91\xe4\xbb\xac\xe4\xbd\xbf\xe7\x94\xa8\xe7\x9a\x84\xe6\x98\xafredhat\xe5\xae\x89\xe8\xa3\x85\xe6\x96\xb9\xe6\xb3\x95\xe5\xa6\x82\xe4\xb8\x8b\xef\xbc\x9a 1.\xe9\x85\x8d\xe7\xbd\xae\xe5\xae\x89\xe8\xa3\x85\xe4\xbe\x9d\xe8\xb5\x96\xe7\x8e\xaf\xe5\xa2\x83 2.\xe4\xb8\x8b\xe8\xbd\xbdshellinabox\xe5\x8c\x85,\xe5\xbc\x80\xe5\xa7\x8b\xe5\xae\x89\xe8\xa3\x85 \xef\xbc\x881\xef\xbc\x89git\xe8\xbf\x9c\xe7\xa8\x8b\xe8\x8e\xb7\xe5\x8f\x96,\xe5\x85\x8b\xe9\x9a\x86\xe6\xba\x90\xe6\x96\x87\xe4\xbb\xb6\xe5\x88\xb0\xe9\xa1\xb9\xe7\x9b\xae\xe7\x9b\xae\xe5\xbd\x95 \xef\xbc\x882\xef\xbc\x89\xe5\x9c\xa8\xe9\xa1\xb5\xe9\x9d\xa2<a href="https://www.cnblogs.com/ssyfj/p/9179587.html" class="c_b_p_desc_readmore">\xe9\x98\x85\xe8\xaf\xbb\xe5\x85\xa8\xe6\x96\x87</a></div></div>\r\n\t\t\t<div class="clear"></div>\r\n\t\t\t<div class="postDesc">posted @ 2018-06-13 20:06 \xe5\xb1\xb1\xe4\xb8\x8a\xe6\x9c\x89\xe9\xa3\x8e\xe6\x99\xaf \xe9\x98\x85\xe8\xaf\xbb(4) \xe8\xaf\x84\xe8\xae\xba(0) <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=9179587" rel="nofollow">\xe7\xbc\x96\xe8\xbe\x91</a></div>\r\n\t\t\t<div class="clear"></div>\r\n\t\t\r\n\t\t\t<div class="postSeparator"></div>\r\n\t\t\r\n\t\t\t<div class="postTitle">\r\n\t\t\t\t<a id="homepage1_HomePageDays_DaysList_ctl05_DayList_TitleUrl_1" class="postTitle2" href="https://www.cnblogs.com/ssyfj/p/9178745.html">linux\xe4\xb8\x8byum\xe9\x94\x99\xe8\xaf\xaf\xef\xbc\x9a[Errno 14] problem making ssl connection Trying other mirror.</a>\r\n\t\t\t</div>\r\n\t\t\t<div class="postCon"><div class="c_b_p_desc">\xe6\x91\x98\xe8\xa6\x81: \xe4\xbb\x8a\xe5\xa4\xa9\xe6\x98\xaf\xe8\xa6\x81yum\xe5\x91\xbd\xe4\xbb\xa4\xe5\xae\x89\xe8\xa3\x85EPEL\xe4\xbb\x93\xe5\xba\x93\xe5\x90\x8e \xe7\xaa\x81\xe7\x84\xb6\xe5\x8f\x91\xe7\x8e\xb0yum\xe5\xae\x89\xe8\xa3\x85\xe5\x85\xb6\xe4\xbb\x96\xe7\x9a\x84\xe8\xbd\xaf\xe4\xbb\xb6\xe5\x87\xba\xe9\x94\x99\xe3\x80\x82 \xe4\xba\x8e\xe6\x98\xaf\xe5\x8e\xbb\xe7\xbd\x91\xe4\xb8\x8a\xe6\x9f\xa5\xe4\xba\x86\xe6\x9f\xa5\xef\xbc\x8c\xe5\x8f\x91\xe7\x8e\xb0\xe8\xae\xb8\xe5\xa4\x9a\xe8\xa7\xa3\xe5\x86\xb3\xe6\x96\xb9\xe6\xb3\x95\xe3\x80\x82\xe4\xbc\xbc\xe4\xb9\x8e\xe6\x98\xafssl\xe8\xaf\x81\xe4\xb9\xa6\xe7\x9a\x84\xe5\x8e\x9f\xe5\x9b\xa0\xef\xbc\x8c\xe6\x9c\x80\xe7\xbb\x88\xe9\x80\x89\xe6\x8b\xa9 vim /etc/yum.repos.d/epel.repo \xe5\xb0\x86baseurl\xe6\xb3\xa8\xe9\x87\x8a\xe5\x8e\xbb\xe6\x8e\x89\xef\xbc\x8c\xe4\xb8\xbamirrorlist\xe5\x8a\xa0\xe4\xb8\x8a\xe6\xb3\xa8\xe9\x87\x8a\xe3\x80\x82\xe7\x84\xb6\xe5\x90\x8e\xe5\xb0\x86enabeld=1\xe5\x8f\x98\xe4\xb8\xba0\xef\xbc\x8c\xe7\xa6\x81\xe7\x94\xa8<a href="https://www.cnblogs.com/ssyfj/p/9178745.html" class="c_b_p_desc_readmore">\xe9\x98\x85\xe8\xaf\xbb\xe5\x85\xa8\xe6\x96\x87</a></div></div>\r\n\t\t\t<div class="clear"></div>\r\n\t\t\t<div class="postDesc">posted @ 2018-06-13 17:06 \xe5\xb1\xb1\xe4\xb8\x8a\xe6\x9c\x89\xe9\xa3\x8e\xe6\x99\xaf \xe9\x98\x85\xe8\xaf\xbb(13) \xe8\xaf\x84\xe8\xae\xba(0) <a href ="https://i.cnblogs.com/EditPosts.aspx?postid=9178745" rel="nofollow">\xe7\xbc\x96\xe8\xbe\x91</a></div>\r\n\t\t\t<div class="clear"></div>\r\n\t\t\r\n</div>\r\n\r\n<div class="topicListFooter"><div id="nav_next_page"><a href="http://www.cnblogs.com/ssyfj/default.html?page=2">\xe4\xb8\x8b\xe4\xb8\x80\xe9\xa1\xb5</a></div></div>\r\n\r\n\r\n\t</div><!--end: forFlow -->\r\n\t</div><!--end: mainContent \xe4\xb8\xbb\xe4\xbd\x93\xe5\x86\x85\xe5\xae\xb9\xe5\xae\xb9\xe5\x99\xa8-->\r\n\r\n\t<div id="sideBar">\r\n\t\t<div id="sideBarMain">\r\n\t\t\t\r\n<!--done-->\r\n<div class="newsItem">\r\n<h3 class="catListTitle">\xe5\x85\xac\xe5\x91\x8a</h3>\r\n\t<div id="blog-news"></div><script type="text/javascript">loadBlogNews();</script>\r\n</div>\r\n\r\n\t\t\t<div id="blog-calendar" style="display:none"></div><script type="text/javascript">loadBlogDefaultCalendar();</script>\r\n\t\t\t\r\n\t\t\t<div id="leftcontentcontainer">\r\n\t\t\t\t<div id="blog-sidecolumn"></div><script type="text/javascript">loadBlogSideColumn();</script>\r\n\t\t\t</div>\r\n\t\t\t\r\n\t\t</div><!--end: sideBarMain -->\r\n\t</div><!--end: sideBar \xe4\xbe\xa7\xe8\xbe\xb9\xe6\xa0\x8f\xe5\xae\xb9\xe5\x99\xa8 -->\r\n\t<div class="clear"></div>\r\n\t</div><!--end: main -->\r\n\t<div class="clear"></div>\r\n\t<div id="footer">\r\n\t\t\r\n<!--done-->\r\nCopyright &copy;2018 \xe5\xb1\xb1\xe4\xb8\x8a\xe6\x9c\x89\xe9\xa3\x8e\xe6\x99\xaf\r\n\t</div><!--end: footer -->\r\n</div><!--end: home \xe8\x87\xaa\xe5\xae\x9a\xe4\xb9\x89\xe7\x9a\x84\xe6\x9c\x80\xe5\xa4\xa7\xe5\xae\xb9\xe5\x99\xa8 -->\r\n</body>\r\n</html>\r\n'
www.ckook.com /forum.php b'HTTP/1.1 301 Moved Permanently\r\nDate: Sun, 24 Jun 2018 10:57:33 GMT\r\nServer: Apache/2.4.23 (Win32) OpenSSL/1.0.2j PHP/5.4.45\r\nX-Powered-By: PHP/5.4.45\r\nLocation: https://www.ckook.com/forum.php\r\nContent-Length: 133\r\nContent-Type: text/html\r\n\r\n<br />\n<b>Notice</b>: Undefined index: HTTP_USER_AGENT in <b>C:\\www\\web\\www\\source\\class\\class_core.php</b> on line <b>19</b><br />\n'
5.589319705963135

输出

(三)使用asyncio相关模块aiohttp(需要先安装,pip3即可)

asyncio支持的相关模块:

https://github.com/aio-libs

import asyncio,aiohttp

async def fetch_async(url):
print(url)
async with aiohttp.request("GET",url) as r:
reponse = await r.text(encoding="utf-8")  #或者直接await r.read()不编码,直接读取,适合于图像等无法编码文件
print(reponse) tasks = [fetch_async('http://www.baidu.com/'), fetch_async('http://www.chouti.com/')] event_loop = asyncio.get_event_loop()
results = event_loop.run_until_complete(asyncio.gather(*tasks))
event_loop.close()

(四)asyncio+requests,使用了事件循环中run_in_executor(创建了线程池去执行requests模块函数)

import asyncio
import requests async def fetch_async(func, *args):
loop = asyncio.get_event_loop()
future = loop.run_in_executor(None, func, *args)  #在内部创建了一个线程池,并以相同顺序返回结果
response = await
future   #等待线程执行结果返回后,才去获取
print(response.url, response.content) tasks = [
fetch_async(requests.get, 'http://www.cnblogs.com/ssyfj/'),
fetch_async(requests.get, 'https://www.cnblogs.com/ssyfj/p/9222342.html')
] loop = asyncio.get_event_loop()
results = loop.run_until_complete(asyncio.gather(*tasks))
loop.close()

源码:

开启线程池:

    def run_in_executor(self, executor, func, *args):
self._check_closed()
if self._debug:
self._check_callback(func, 'run_in_executor')
if executor is None:
executor = self._default_executor
if executor is None:
executor = concurrent.futures.ThreadPoolExecutor()  #创建线程池
self._default_executor = executor
return futures.wrap_future(executor.submit(func, *args), loop=self)  #线程池执行函数

调用线程安全处理协程对象call_soon_threadsafe。主线程处理事件循环,子线程处理任务。

response = await future  #response是future对象,futures是异步并发模块

    def __iter__(self):  #可迭代,异步对象
if not self.done():
self._asyncio_future_blocking = True
yield self # This tells Task to wait for completion.
assert self.done(), "yield from wasn't used with future"
return self.result() # May raise too.

(五)gevent+requests

import gevent,requests,time
from gevent import monkey monkey.patch_all()  #将socket变为异步 def fetch_async(url):
reponse = requests.get(url)
print(reponse.url,reponse.content) begin = time.time()
gevent.joinall([
gevent.spawn(fetch_async("https://www.python.org/")),
gevent.spawn(fetch_async("https://www.baidu.com/")),
gevent.spawn(fetch_async("https://www.github.com/")),
]) end = time.time()
print(end-begin)

gevent线程池

import gevent,time,requests
from gevent.pool import Pool  #协程池,一次最多数量限制 pool = Pool(10) def fetch_async(method, url, req_kwargs):
print(method, url, req_kwargs)
response = requests.request(method=method, url=url, **req_kwargs)
print(response.url, response.content) begin = time.time()
gevent.joinall([
pool.spawn(fetch_async, method='get', url='https://www.python.org/', req_kwargs={}),
pool.spawn(fetch_async, method='get', url='https://www.yahoo.com/', req_kwargs={}),
pool.spawn(fetch_async, method='get', url='https://www.github.com/', req_kwargs={}),
]) end = time.time()
print(end-begin)

(六)grequests===>gevent+request是对上面的结合使用

import grequests

request_list = [
grequests.get('https://www.python.org/'),
grequests.get('https://www.yahoo.com/'),
grequests.get('https://www.github.com/'),
] reponse_list = grequests.map(request_list)
print(reponse_list)

(七)twisted的使用

推文:网络框架twisted

from twisted.internet import defer
from twisted.web.client import getPage
from twisted.internet import reactor def one_done(arg):
print(arg) def all_done(arg):
print("all done")
reactor.stop() @defer.inlineCallbacks
def task(url):
res = getPage(bytes(url,encoding="utf-8")) #获取页面,发送http请求,是使用select池将所有socket请求保存,依据此进行计数。
print('',type(res))    #<class 'twisted.internet.defer.Deferred'>
res.addCallback(one_done) #对每一个请求都添加一个回调方法
yield res #返回他 start_url_list = [
'http://www.baidu.com',
'http://www.github.com',
] defer_list = []
for url in start_url_list:
v = task(url) #发送请求后立即返回,不等待返回,v是一个特殊对象,标志你发送到那个请求
print(v,type(v))
defer_list.append(v) d = defer.DeferredList(defer_list) #将上面的特殊对象列表一起放入DeferredList
d.addBoth(all_done)  #为所有对象添加回调 reactor.run()  #会一直循环,我们需要在任务执行完毕后关闭。含有计数器,执行一个任务,会执行一次one_done,计数减一。单任务执行完毕,计数为0,执行all_done

(八)tornado的使用

from tornado.httpclient import AsyncHTTPClient
from tornado.httpclient import HTTPRequest
from tornado import ioloop COUNT = def handle_response(response):
"""
处理返回值内容(需要维护计数器,来停止IO循环),调用 ioloop.IOLoop.current().stop()
:param response:
:return:
"""
global COUNT
COUNT -=
if response.error:
print("Error:", response.error)
else:
print(response.body)
if COUNT == :
ioloop.IOLoop.current().stop() def func():
url_list = [
'http://www.baidu.com',
'http://www.bing.com',
] global COUNT
COUNT = len(url_list) for url in url_list:
print(url)
http_client = AsyncHTTPClient()
http_client.fetch(HTTPRequest(url), handle_response) ioloop.IOLoop.current().add_callback(func)
ioloop.IOLoop.current().start()

选用原则:gevent>twisted>tornado>asyncio

三:自定义异步IO模块开发

# coding:utf8
# __author: Administrator
# date: //
# /usr/bin/env python
import socket
import select class HttpRequest:
def __init__(self,sk,host,callback):
self.socket = sk
self.host= host
self.callback = callback def fileno(self):  #select需要的是文件描述符,传递的数据对象,必须含有fileno方法,返回文件描述符
return self.socket.fileno() class HttpResponse:
def __init__(self,recv_data):
self.recv_data = recv_data
self.header_dict = {}
self.body = None
self.initialize() def initialize(self):
#先分割请求头
headers,body = self.recv_data.split(b'\r\n\r\n',)
#在分割各个请求头数据
header_list = headers.split(b"\r\n")
for hd in header_list:
hd_str = str(hd,encoding="utf-8")
item = hd_str.split(":")
if len(item) == :
self.header_dict[item[]]=item[] self.body = str(body,encoding="utf-8") class AsyncRequest():
def __init__(self):
self.read_list = []
self.write_list = []
self.error_list = [] def create_task(self,task):
try:
sk = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sk.setblocking(False)
sk.connect((task['host'], ,))
except BlockingIOError as e:
pass
request = HttpRequest(sk,task['host'],task['callback'])
self.read_list.append(request)
self.write_list.append(request) def run(self):
while True:
r_list,w_list,e_list = select.select(self.read_list,self.write_list,self.error_list)
for w in w_list: #向网站发送请求头,开始获取资源
print(w.host,"连接成功...")
tpl = "GET / HTTP/1.0\r\nHost:%s\r\n\r\n"%(w.host,)
w.socket.send(bytes(tpl,encoding="utf-8"))
self.write_list.remove(w) for r in r_list:
print(r.host,"开始采集资源...")
recv_data = bytes()
while True:
try:
chunck = r.socket.recv()
recv_data += chunck
except BlockingIOError as e: #当数据为空,且不是由于阻塞抛出异常时,才是完成数据采集
continue

else:
if not chunck:
break
#采集结束,封装数据,开始回调操作

reponse = HttpResponse(recv_data)
r.callback(reponse)
r.socket.close()
self.read_list.remove(r) #所有数据采集完成,退出
if len(self.read_list) == 0:
break
def f1(reponse):
print("f1",reponse.header_dict) def f2(reponse):
print("f2",reponse.header_dict) def f3(reponse):
print("f3",reponse.header_dict) url_list = [
{"host":'www.baidu.com',"callback":f1},
{'host':'cn.bing.com',"callback":f2},
{'host':'www.cctv.com',"callback":f3}
] AsynReq = AsyncRequest() for url in url_list:
AsynReq.create_task(url) AsynReq.run()

python---爬虫相关性能(各个异步模块的使用,和自定义异步IO模块)的更多相关文章

  1. Mac os 下 python爬虫相关的库和软件的安装

      由于最近正在放暑假,所以就自己开始学习python中有关爬虫的技术,因为发现其中需要安装许多库与软件所以就在这里记录一下以避免大家在安装时遇到一些不必要的坑. 一. 相关软件的安装:   1. h ...

  2. Python 爬虫六 性能相关

    前面已经讲过了爬虫的两大基础模块: requests模块:用来伪造请求爬取数据 bs4模块:用来整理,提取数据 当我们真正的开始有需求的时候通常都是批量爬取url这样的.那如何批量爬取呢? 按照正常的 ...

  3. python爬虫之性能相关

    性能相关 在编写爬虫时,性能的消耗主要在IO请求中,当单进程单线程模式下请求URL时必然会引起等待,从而使得请求整体变慢. import requests def fetch_async(url): ...

  4. python爬虫相关基础概念

    什么是爬虫 爬虫就是通过编写程序模拟浏览器上网,然后让其去互联网上抓取数据的过程. 哪些语言可以实现爬虫 1.php:可以实现爬虫.但是php在实现爬虫中支持多线程和多进程方面做得不好. 2.java ...

  5. python爬虫相关

    一.Python re模块的基本用法: https://blog.csdn.net/chenmozhe22/article/details/80601971 二.爬取网页图片 https://www. ...

  6. (转)python爬虫----(scrapy框架提高(1),自定义Request爬取)

    摘要 之前一直使用默认的parse入口,以及SgmlLinkExtractor自动抓取url.但是一般使用的时候都是需要自己写具体的url抓取函数的. python 爬虫 scrapy scrapy提 ...

  7. python 爬虫相关含Scrapy框架

    1.从酷狗网站爬取 新歌首发的新歌名字.播放时长.链接等 from bs4 import BeautifulSoup as BS import requests import re import js ...

  8. python爬虫相关安装与应用

    1.mysql数据库用于存储大量数据. 2.Navicat for MySQL以图形和表格等形式管理数据库工具. 3.编程语言python3与环境配置 4.pythcharm集成开发环境(社区版)不需 ...

  9. Python爬虫爬取豆瓣电影之数据提取值xpath和lxml模块

    工具:Python 3.6.5.PyCharm开发工具.Windows 10 操作系统.谷歌浏览器 目的:爬取豆瓣电影排行榜中电影的title.链接地址.图片.评价人数.评分等 网址:https:// ...

  10. Python爬虫基础(一)——HTTP

    前言 因特网联系的是世界各地的计算机(通过电缆),万维网联系的是网上的各种各样资源(通过超文本链接),如静态的HTML文件,动态的软件程序······.由于万维网的存在,处于因特网中的每台计算机可以很 ...

随机推荐

  1. java运行时内存分类

    主要有java栈(虚拟机栈), 堆 ,方法区. 线程私有: 栈: 每个方法执行的时候 都会同时创建一个栈桢 Stack Frame 用于存储  局部变量表, 操作数栈,动态链接, 方法出口等信息 线程 ...

  2. 4个数的和为0 51nod 1267

    给出N个整数,你来判断一下是否能够选出4个数,他们的和为0,可以则输出"Yes",否则输出"No". Input 第1行,1个数N,N为数组的长度(4 < ...

  3. Scrum立会报告+燃尽图(十月二十四日总第十五次)

    此作业要求参见:https://edu.cnblogs.com/campus/nenu/2018fall/homework/2284 项目地址:https://git.coding.net/zhang ...

  4. 第二篇-bmob云端服务器的发现

    最近认识了一个Bmob云端服务器,使用它提供的API可以轻松地完成与数据库(bmob)的交互,使开发更加专注于功能的实现. 这很方便对js的学习,完全可以利用前端三板斧来搭建一个网站,并且初步实现简单 ...

  5. Hibernate:工作原理

    Hibernate的工作原理图如下所示:

  6. 软工alpha阶段个人总结

    一.个人总结 类别 具体技能和面试问题 现在的回答(大三下) 语言 最拿手的语言之一,代码量是多少? java,代码量在一万行左右 语言 最拿手的语言之二,代码量是多少? C语言,代码量在五千行左右 ...

  7. MyEclipse+SSH开发环境配置

    MyEclipse+Struts+Hibernate+Mysql开发环境配置 软件: jdk-6u22-windows-x64.exe apache-tomcat-6.0.29.exe mysql-5 ...

  8. 【Linux 命令】- tar 命令

    语法 tar [-ABcdgGhiklmMoOpPrRsStuUvwWxzZ][-b <区块数目>][-C <目的目录>][-f <备份文件>][-F <Sc ...

  9. BurpSuite 激活破解

    1.下载软件关于Burp Suite, 它是进行Web应用安全测试的一个集成平台,无缝融合各种安全工具并提供全面的接口适配,支持完整的Web应用测试流程,从最初的映射和应用程序的攻击面分析到发现和利用 ...

  10. Mysql 学习之 SQL的执行顺序

    mysql的json查询:                                                                       1.一条普通的SQL SELEC ...