摘要:從到到再到,各家的語(yǔ)法都不太一樣。底層的實(shí)現(xiàn)是,看名字應(yīng)該是的意思。然后在這個(gè)基礎(chǔ)上實(shí)現(xiàn)了的和的。的的語(yǔ)法風(fēng)格也是類似所以從語(yǔ)法上來(lái)說(shuō)就三類這樣強(qiáng)制要求的為代表的隱式控制權(quán)的為代表強(qiáng)買強(qiáng)賣編碼風(fēng)格的
從generator到greenlet到stackless再到pypy,各家的語(yǔ)法都不太一樣。pypy底層的實(shí)現(xiàn)是continulet,看名字應(yīng)該是continuation的意思。然后在這個(gè)基礎(chǔ)上實(shí)現(xiàn)了stackless的api和greenlet的api。這種實(shí)現(xiàn)都是在用戶代碼里,而不是在解釋器的內(nèi)置庫(kù)里實(shí)現(xiàn)的。
from _continuation import continulet def func(cont, a, b): print(a) cont.switch() print(b) cont = continulet(func, "hello", "world") cont.switch() print("switched from continulet") cont.switch()
代碼的輸出是
hello switched from continulet world
從使用的感覺(jué)上非常類似于greenlet。感覺(jué)就是把greenlet隱式的當(dāng)前greenlet的概念變成了顯式的第一個(gè)函數(shù)參數(shù)。Java的quasar的語(yǔ)法風(fēng)格也是類似: http://docs.paralleluniverse.co/quasar/
所以從語(yǔ)法上來(lái)說(shuō)就三類
generator這樣強(qiáng)制要求yield的
greenlet為代表的隱式y(tǒng)ield控制權(quán)的
stackless為代表強(qiáng)買強(qiáng)賣actor編碼風(fēng)格的
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/37390.html
摘要:協(xié)程其實(shí)就是一個(gè)可中途中斷,由外部來(lái)控制執(zhí)行進(jìn)程的函數(shù)。這些第三方的選擇的共同特點(diǎn)是協(xié)程的都是隱式的。這就是顯示控制和隱式控制的區(qū)別。本文討論的協(xié)程就是這一種,后面會(huì)逐漸展開到如何利用這種顯示控制的協(xié)程來(lái)解決阻塞和流程阻塞的問(wèn)題。 Python官方的實(shí)現(xiàn)里,協(xié)程只有g(shù)enerator這一招。協(xié)程其實(shí)就是一個(gè)可中途中斷,由外部來(lái)控制執(zhí)行進(jìn)程的函數(shù)。除了官方的generator,還有很多第...
摘要:特別是最火的協(xié)程框架也無(wú)法保存狀態(tài),讓人非常惋惜。但是因?yàn)闂5谋旧頍o(wú)法持久化,所以也就無(wú)法持久化。其難度在于,假設(shè)整個(gè)要持久化的調(diào)用棧全部都是內(nèi)的,比如純的。采取的是暴力地把整個(gè)棧區(qū)域拷貝到上的方式來(lái)保存其狀態(tài)。 python主流的協(xié)程實(shí)現(xiàn)有五種: cPython的generator cPython的greenlet cPython的fibers stackless python ...
摘要:如果說(shuō)相比來(lái)說(shuō),是一種隱式的協(xié)程的話,提供的就更加隱式了。通過(guò)調(diào)用可以知道這個(gè)鏈表目前的大小。正式因?yàn)闆](méi)有把底層的協(xié)程直接控制接口開放,而是強(qiáng)買強(qiáng)賣了一個(gè),所以想要在像那樣隨心所欲的操縱協(xié)程還是頗費(fèi)一番周折的。 如果說(shuō)greenlet相比generator來(lái)說(shuō),是一種隱式的協(xié)程的話,stackless python提供的api就更加隱式了。 import stackless def...
摘要:前言第一次接觸到是因?yàn)榭吹蕉鱾ゴ笊竦氖褂霉芾砟愕捻?xiàng)目,之前可能和大家的選擇類似使用或者來(lái)管理的包環(huán)境。是針對(duì)的包的多版本管理,通過(guò)將包安裝到一個(gè)模塊來(lái)作為的包虛擬環(huán)境,通過(guò)切換目錄來(lái)實(shí)現(xiàn)不同包環(huán)境間的切換。 前言 第一次接觸到 pipenv 是因?yàn)榭吹紷董明偉大神的《使用pipenv管理你的項(xiàng)目》,之前可能和大家的選擇類似使用 virtualenv 或者 pyenv 來(lái)管理 pyth...
摘要:正式的專欄第篇,同學(xué)站住,別錯(cuò)過(guò)這個(gè)從開始的文章前面學(xué)委的入門到精通專欄積累了篇文章,當(dāng)然學(xué)委博客還有幾十篇應(yīng)用的文章。 正式的Python專欄第9篇,同學(xué)站住...
閱讀 3028·2021-08-20 09:37
閱讀 1644·2019-08-30 12:47
閱讀 1172·2019-08-29 13:27
閱讀 1728·2019-08-28 18:02
閱讀 799·2019-08-23 18:15
閱讀 3136·2019-08-23 16:51
閱讀 973·2019-08-23 14:13
閱讀 2207·2019-08-23 13:05