Stackless Python
Originalförfattare | Christian Tismer |
---|---|
Utvecklare | Anselm Kruis |
Initial release | 1998 |
Stabil frisättning | |
Förhandsgranska release | 12 augusti 2021
|
Förvar | |
Skrivet i | C , Python |
Operativ system | Linux , macOS , Windows |
Typ | Tolk |
Licens | Python Software Foundation-licens |
Hemsida |
Stackless Python , eller Stackless , är en Python-programmeringsspråkstolk , så kallad för att den undviker beroende av C - anropsstacken för sin egen stack. I praktiken använder Stackless Python C-stacken, men stacken rensas mellan funktionsanrop. Den mest framträdande egenskapen hos Stackless är mikrotrådar , som undviker mycket av den overhead som är förknippad med vanliga operativsystemtrådar . Förutom Python-funktioner lägger Stackless även till stöd för coroutines , kommunikationskanaler och uppgiftsserialisering .
Design
Med Stackless Python delas ett körande program upp i mikrotrådar som hanteras av språktolken själv, inte operativsystemets kärna — kontextväxling och uppgiftsschemaläggning görs rent i tolken (dessa betraktas alltså också som en form av grön tråd ) . Microthreads hanterar utförandet av olika deluppgifter i ett program på samma CPU-kärna. Således är de ett alternativ till händelsebaserad asynkron programmering och undviker även overheaden med att använda separata trådar för program med en kärna (eftersom inget lägesväxling mellan användarläge och kärnläge behöver göras, så CPU-användningen kan minskas).
Även om mikrotrådar gör det lättare att hantera körande deluppgifter på en enda kärna, tar Stackless Python inte bort CPythons Global Interpreter Lock och använder inte heller flera trådar och/eller processer. Så det tillåter endast kooperativ multitasking på en delad CPU och inte parallellism (företräde var ursprungligen inte tillgängligt men finns nu i någon form). För att använda flera CPU-kärnor, skulle man fortfarande behöva bygga ett kommunikationssystem mellan processer ovanpå Stackless Python-processer.
På grund av det stora antalet ändringar i källan kan Stackless Python inte installeras på en redan existerande Python-installation som ett tillägg eller bibliotek . Det är istället en komplett Python-distribution i sig. Majoriteten av Stackless funktioner har också implementerats i PyPy , en självvärdande Python-tolk och JIT-kompilator .
Använda sig av
Även om hela Stackless är en separat distribution, har dess växlingsfunktionalitet framgångsrikt paketerats som en CPython -tillägg som kallas greenlet. Den används av ett antal bibliotek (t.ex. gevent) för att tillhandahålla en grön trådningslösning för CPython. Python har sedan dess fått en inbyggd lösning för gröna trådar: await /async.
Stackless används flitigt i implementeringen av det massiva multiplayer-onlinespelet Eve Online såväl som i IronPorts e-postplattform.
Se även
externa länkar
- Officiell hemsida
- Stackless Python-dokumentation för: 3,7-slp , 3,6-slp , 3,5-slp , 3,4-slp , 2,7-slp
- stackless på GitHub
- Multithreaded Game Scripting med Stackless Python av Harry Kalogirou
- Fortsättningar och Stackless Python av Christian Tismer