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

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 数据存储

    简单的记录一下而已. 1.寄存器: 特点:快,存储有限. 存储地点:处理器内部. 2.堆栈 特点:仅次于寄存器快,通过堆栈指针在处理器获取支持.堆栈指针下移,分配内存,上移,释放内存.此外须知生命周期 ...

  2. php异步学习(2)

    PHP开启异步多线程执行脚本   场景要求 客户端调用服务器a.php接口,需要执行一个长达5s-20s不等的耗资源操作,但是客户端响应请求时间为5秒(微信公众账号服务器请求响应超时时间),5s以上无 ...

  3. Redis 列表(List)

    Redis列表是简单的字符串列表,按照插入顺序排序.你可以添加一个元素到列表的头部(左边)或者尾部(右边),一个列表最多可以包含2^32-1个元素(4294967295,每个列表超过40亿个元素). ...

  4. lintcode-383-装最多水的容器

    383-装最多水的容器 给定 n 个非负整数 a1, a2, ..., an, 每个数代表了坐标中的一个点 (i, ai).画 n 条垂直线,使得 i 垂直线的两个端点分别为(i, ai)和(i, 0 ...

  5. lintcode-201-线段树的构造

    201-线段树的构造 线段树是一棵二叉树,他的每个节点包含了两个额外的属性start和end用于表示该节点所代表的区间.start和end都是整数,并按照如下的方式赋值: 根节点的 start 和 e ...

  6. 查看sqlserver数据库的编码格式

    查询语句:SELECT  COLLATIONPROPERTY('Chinese_PRC_Stroke_CI_AI_KS_WS', 'CodePage'): 查询结果: 936 简体中文GBK 950 ...

  7. 转 maven3常用命令、java项目搭建、web项目搭建详细图解

    转自地址:http://blog.csdn.net/edward0830ly/article/details/8748986 ------------------------------maven3常 ...

  8. php多维数组排序 3

    本文实例讲述了php简单实现多维数组排序的方法.分享给大家供大家参考,具体如下: 之前在做一个功能的时候,必须要把数据放到二维数组里并且排序,然后上网找找解决思路, 这时候会用到array_multi ...

  9. Vue父组件与子组件传递事件/调用事件

    1.Vue父组件向子组件传递事件/调用事件 <div id="app"> <hello list="list" ref="child ...

  10. (转)Java GC基本算法

    http://blog.csdn.net/heyutao007/article/details/38151581 1.引用计数(reference counting)    原理:此对象有一个引用,则 ...