版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第十八章Python本節(jié)所講內(nèi)容Greenlet使用Gevent協(xié)程的概defyield簡(jiǎn)單理解:協(xié)程是也是實(shí)現(xiàn)多任務(wù)的式必須自己承擔(dān)調(diào)度的責(zé)任,同時(shí),協(xié)程也失去了標(biāo)準(zhǔn)線(xiàn)程使用多CPU的能力);234CPU1、無(wú)法利用多核資源:協(xié)程的本質(zhì)是個(gè)單線(xiàn)程,它不能同時(shí)將單個(gè)CPU的多個(gè)核用上,協(xié)程需要和進(jìn)程配合才能運(yùn)行在多CPU上.cpu密集型應(yīng)用;yielddefwhiledefwork2():whiledefw1=work1()w2=work2()whileTrue:ifname=="main":Greenlet模使用如下命令安裝greenlet:pip3installimporttimeimportgreenletdefforiinrange(5):#切換到協(xié)程2里面執(zhí)行對(duì)應(yīng)的任#任務(wù)defforiinrange(5):#切換到第一個(gè)協(xié)程執(zhí)行對(duì)應(yīng)的任ifname=='main#創(chuàng)建協(xié)程指定的對(duì)應(yīng)任g1=greenlet.greenlet(work1)g2=greenlet.greenlet(work2)switchsw?t?]:轉(zhuǎn)換Gevent的使GreenletGreenlet切換任務(wù)的第庫(kù),那就是Gevent。輸入輸出,由于IO操作非常耗時(shí),經(jīng)常使程序處于等待狀態(tài),有了GeventGreenletIO。安裝:pip3installgevent1.geventimportgeventdefwork(n):foriin#獲取當(dāng)前協(xié)print(gevent.getcurrent(),i)g1=gevent.spawn(work,5)g2=gevent.spawn(work,5)g3=gevent.spawn(work,5)<Greenletat0x10e49f550:f(5)><Greenletat0x10e49f550:f(5)><Greenletat0x10e49f550:f(5)><Greenletat0x10e49f550:f(5)><Greenletat0x10e49f550:f(5)><Greenletat0x10e49f910:f(5)>可以看到,3個(gè)greenletspawn[sp??n]:產(chǎn)卵;;引起;導(dǎo)致;造geventimportgeventdefwork(n):foriin#獲取當(dāng)前協(xié)程print(gevent.getcurrent().namei)g1=gevent.spawn(work,5)g2=gevent.spawn(work,5)g3=gevent.spawn(work,5)Greenlet-0Greenlet-1Greenlet-2Greenlet-0Greenlet-1Greenlet-2Greenlet-0Greenlet-1Greenlet-2Greenlet-0Greenlet-1Greenlet-2Greenlet-0Greenlet-1Greenlet-2spawn[sp??n]:產(chǎn)卵;;引起;導(dǎo)致;造18.3.3給程序打補(bǔ)丁importgeventimporttimefromgeventimport#打補(bǔ)丁,讓gevent框架識(shí)別耗時(shí)操作,比如:time.sleep,網(wǎng)絡(luò)請(qǐng)求延#任務(wù)defforiinrange(num): gevent.sleep(0.2)#任務(wù)1defforiinrange(num): #ifname=='main#創(chuàng)建協(xié)程指定對(duì)應(yīng)的任g1=gevent.spawn(work1,3)g2=gevent.spawn(work2,#主線(xiàn)程等待協(xié)程執(zhí)行完成以后程序再退18.3.4注意當(dāng)前程序是一個(gè)死循環(huán)并且還能有耗時(shí)操作,就不需要加上join方法了,因?yàn)槌绦蛐枰恢边\(yùn)行不importgeventimporttimefromgeventimport#打補(bǔ)丁,讓gevent框架識(shí)別耗時(shí)操作,比如:time.sleep,網(wǎng)絡(luò)請(qǐng)求延#任務(wù)defforiinrange(num): gevent.sleep(0.2)#任務(wù)1defforiinrange(num): #ifname=='main#創(chuàng)建協(xié)程指定對(duì)應(yīng)的任g1=gevent.spawn(work1,3)g2=gevent.spawn(work2,3)whileTrue:主線(xiàn)執(zhí)主線(xiàn)執(zhí)主線(xiàn)執(zhí)主線(xiàn)執(zhí) 使用Gevent完成多任多任務(wù)fromgeventimport#打補(bǔ)?。鹤実event使用網(wǎng)絡(luò)請(qǐng)求的耗時(shí)操作,讓協(xié)程自動(dòng)切換執(zhí)行對(duì)應(yīng)的任importgeventimporturllib.request#網(wǎng)絡(luò)請(qǐng)求模#根據(jù)地址對(duì)應(yīng)defdownload_img(img_url,img_name):#根據(jù)地址打開(kāi)網(wǎng)絡(luò)資源數(shù)response=#創(chuàng)建文件把數(shù)據(jù)寫(xiě)入到指定文件里withopen(img_name,"wb")asimg_file:whileTrue:#網(wǎng)絡(luò)數(shù)img_data=response.read(1024)ifimg_data:#把數(shù)據(jù)寫(xiě)入到指定文件里exceptExceptionasprint("異常:",e)print("成功:%s"%img_name)ifname=='main':#準(zhǔn)備地img_url1= /bdr/576img_url2= /bdr/594 img_url3= /bdr/864#創(chuàng)建協(xié)程指派對(duì)應(yīng)的任g1=gevent.spawn(download_img,img_url1,g2gevent.spawn(download_imgimg_url2,2.jpg")g3gevent.spawn(download_imgimg_url3,3.jpg")線(xiàn)程等待所有的協(xié)程執(zhí)行完成以后程序再退出gevent.joinall([g1,g2,g3]) /bdr/576 /bdr/594 /bdr/5942.jpg1.jpg從上面的結(jié)果可以看到依次根據(jù)地址去,但是收到數(shù)據(jù)的先后順序不一定與發(fā)送順序相同,fromgeventimportmonkeyimportgevent,requests#pipinstallfromurllibimport#def#開(kāi)print('start#的url地url= #模擬瀏覽'Referer': 'User-Agent':'Mozilla/5.0(WindowsNT10.0;Win64;x64)AppleWebKit/537.36(KHTML,likeGecko)Chrome/71.0.3578.80Safari/537.36'}#模擬瀏覽器服務(wù)器發(fā)送內(nèi)str_data='''h:beautysn:30listtype:newtemp:1'''send_datafordatainline_data=data.split(':')#返回一個(gè)列iflen(line_data)==2:#如果這個(gè)列表當(dāng)中有兩個(gè)數(shù)據(jù)key,value=line_data#a,b=[1,2]#進(jìn)行序列解包賦值!ifkeyandvalue:#如果兩者keyvalue都有值我就進(jìn)行搭建send_data[key]=#end_data=send_data['sn']=eval(str(num)+'*'+'30')#eval('3*4')#z字典的修改#requests這個(gè)方法進(jìn)行網(wǎng)求,模擬劉燃?xì)夥?wù)器返回結(jié)果response=requests.get(url,headers=headers,params=send_data)#json()方法轉(zhuǎn)換為python操作對(duì)象{‘a(chǎn)";1}json_data=#利用么酷的方法,序列解包賦forindex,srcin#獲取url地image_url=src['qhimg_url']#給定本地地image_name='./360_image/'+image_url[-#吧網(wǎng)的到本exceptExceptionase:#format格式print('{}isdo
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度餐飲業(yè)食品添加劑使用規(guī)范協(xié)議書(shū)模板3篇
- 二零二五年飯館員工勞動(dòng)合同與員工福利配套協(xié)議3篇
- 二零二五年鈑金噴涂維修產(chǎn)業(yè)數(shù)字化轉(zhuǎn)型承包協(xié)議2篇
- 2024版權(quán)質(zhì)押合同質(zhì)權(quán)實(shí)現(xiàn)及債務(wù)清償
- 2024年物業(yè)管理公司關(guān)于小區(qū)保潔服務(wù)合同
- 二零二五年度智慧城市建設(shè)項(xiàng)目宣傳推廣服務(wù)合同3篇
- 2024版電動(dòng)伸縮門(mén)銷(xiāo)售協(xié)議3篇
- 2024年股權(quán)投資合同范本:投資金額與股權(quán)比例
- 2025年度新能源汽車(chē)充電樁建設(shè)合作協(xié)議范本3篇
- 二零二五年度環(huán)保設(shè)備模具定制合同范本3篇
- 奶茶督導(dǎo)述職報(bào)告
- 山東萊陽(yáng)核電項(xiàng)目一期工程水土保持方案
- 白熊效應(yīng)(修訂版)
- 小學(xué)數(shù)學(xué)知識(shí)結(jié)構(gòu)化教學(xué)
- 視頻監(jiān)控維保項(xiàng)目投標(biāo)方案(技術(shù)標(biāo))
- 社會(huì)組織能力建設(shè)培訓(xùn)
- 立項(xiàng)報(bào)告蓋章要求
- 2022年睪丸腫瘤診斷治療指南
- 被執(zhí)行人給法院執(zhí)行局寫(xiě)申請(qǐng)范本
- 主變壓器試驗(yàn)報(bào)告模板
- 安全防護(hù)通道施工方案
評(píng)論
0/150
提交評(píng)論