Detta program kräver ett system som kan gaffla processer. Det kommer inte att köras pålitligt (eller alls) i en rent tolkad miljö som en webbläsares JavaScript -konsol. Den är designad för UNIX-liknande system (Linux, MacOS).
Detta program använder Pythons `OS.Fork ()` för processskapande. Kom ihåg att skapa ett stort antal processer kan överväldiga ditt system. Testa med små värden på `n` först.
`` `python
importsystem
importsys
def create_binary_tree (djup, nivå =0):
"" "
Rekursivt skapar ett binärt träd av processer.
Args:
Djup:det önskade djupet på trädet.
Nivå:Den aktuella nivån i trädet (börjar klockan 0).
"" "
Om nivå
utskrift (f "process {os.getpid ()} på nivå {nivå}") # skriva ut process -id och nivå
# Skapa vänsterbarn
pid_left =os.fork ()
Om pid_left ==0:# barnprocess
create_binary_tree (djup, nivå + 1)
OS._EXIT (0) # VIKTIGT:Avsluta barnprocess för att undvika oändlig rekursion
# Skapa rätt barn
pid_right =os.fork ()
Om PID_RIGHT ==0:# Barnprocess
create_binary_tree (djup, nivå + 1)
OS._EXIT (0) # VIKTIGT:Avsluta barnprocess för att undvika oändlig rekursion
# Förälderprocess väntar på att barn ska avsluta (valfritt, men bra praxis)
OS.WAITPID (PID_LEFT, 0)
OS.WAITPID (PID_RIGHT, 0)
om __name__ =="__main__":
Om len (sys.argv)! =2:
tryck ("Användning:python binary_tree.py ")
sys.exit (1)
försök:
Djup =int (sys.argv [1])
Om djupet <0:
tryck ("Djup måste vara ett icke-negativt heltal.")
sys.exit (1)
create_binary_tree (djup)
utom värdeError:
Skriv ut ("Ogiltigt djupvärde. Ange ett heltal.")
sys.exit (1)
`` `
Hur man kör:
1. spara: Spara koden som `binary_tree.py`.
2. Kör från kommandoraden: `python binary_tree.py ` där `` är det önskade djupet i trädet (t.ex. `python binary_tree.py 3`).
Viktiga överväganden:
* Felhantering: Koden innehåller grundläggande felhantering för ogiltiga kommandoradsargument.
* Processavbrott: "Os._exit (0)` samtal är avgörande. Utan dem skulle varje barnprocess rekursivt skapa fler processer, vilket leder till en okontrollerad explosion av processer.
* resursanvändning: Tänk på den exponentiella tillväxten av processer. Ett djup på 4 kommer redan att skapa många processer. Ett djup på 10 kommer sannolikt att krascha ditt system.
* Processhantering: "Os.WaitPid ()` samtal är valfria men rekommenderas för bättre processhantering. De säkerställer att förälderprocessen väntar på att dess barn ska avslutas innan de går ut. Utan dem kan din förälderprocess avslutas innan vissa barnprocesser har slutförts.
* Operativsystembegränsningar: Det maximala antalet processer du kan skapa begränsas av ditt operativsystem.
Denna förbättrade version ger bättre felhantering och processhantering, vilket gör den säkrare och mer robust. Kom ihåg att alltid börja med små värden på "n" för att testa och förstå beteendet innan du försöker större värden.