第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會有你想問的

gevent,eventlet,Twisted,Tornado各有什么區(qū)別和優(yōu)劣

gevent,eventlet,Twisted,Tornado各有什么區(qū)別和優(yōu)劣

gevent,eventlet,Twisted,Tornado各有什么區(qū)別和優(yōu)劣
查看完整描述

1 回答

?
交互式愛情

TA貢獻(xiàn)1712條經(jīng)驗(yàn) 獲得超3個(gè)贊

先說純python的tornado,tornado應(yīng)該是最簡單的基于epoll(或kqueue)的httpserver和httpclient,說白了就是封裝了python標(biāo)準(zhǔn)庫的socket和select.epoll(或select.kqueue),所以你也可以照著tornado實(shí)現(xiàn)一個(gè)媲美nginx的httpserver。當(dāng)然,為了利用好這個(gè)基于epoll的的server,你需要在io處搞個(gè)回調(diào)函數(shù),只有當(dāng)你這個(gè)io結(jié)束,才執(zhí)行回調(diào)函數(shù),如果你這個(gè)io不結(jié)束,你就執(zhí)行了回調(diào)函數(shù)(同步的寫法),產(chǎn)生的后果當(dāng)然是阻塞(因?yàn)橐恢痹诘饶愕膇o結(jié)束),所以用了epoll,你就需要層層回調(diào),代碼肯定很難看的,tornado為了解決這個(gè)問題,就加了個(gè)裝飾器以及利用了python的yield關(guān)鍵字,裝飾器的內(nèi)部實(shí)現(xiàn)的函數(shù)名字就叫replace_callback,顧名思義,就是替換回調(diào),yield會使函數(shù)或方法凍結(jié),相當(dāng)于你搞了個(gè)回調(diào),但看起來像同步的,當(dāng)然,這個(gè)寫法也有很不方便的地方,但已經(jīng)比回調(diào)爽多了。
tornado雖然是最簡單的基于epoll的httpserver,但坑也非常明顯,前面說了,tornado僅僅封裝了socket和select.epoll,這就導(dǎo)致,木有python數(shù)據(jù)庫適配器能和tornado無縫對接,只有兩種情況下滿足其一才能把數(shù)據(jù)庫適配器改造成tornado能用的,第一:這個(gè)適配器是純python的,關(guān)鍵是socket通信是純python的;第二:這個(gè)適配器自帶異步,例如psycopg2??墒蔷退銤M足了上面的情況,你還得用tornado自帶的ioloop和iostream進(jìn)行封裝,相當(dāng)麻煩。
gevent就不一樣了,作為另一個(gè)python協(xié)程庫,里面封裝了C,這導(dǎo)致他不是純python的,無法適用pypy(除非提供cffi接口),gevent的特點(diǎn)是自己搞了個(gè)socket和select,通過monkey_patch的方法干掉了python自帶的socket和select,從最底層就開始玩epoll,用gevent做聊天室,不用像tornado那樣還需寫回調(diào)函數(shù)或yield,只需要調(diào)用gevent.event的wait和set方法。
gevent調(diào)用數(shù)據(jù)庫遠(yuǎn)比tornado簡單,雖然它對適配器的要求和tornado一樣,但不需要你自己寫代碼封裝(或很少的代碼)

查看完整回答
反對 回復(fù) 2018-12-18
  • 1 回答
  • 0 關(guān)注
  • 811 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號