Home Hardware Networking Programmazione Software Domanda Sistemi
Conoscenza del computer >> Programmazione >> C /C + + Programming >> .

Programma che prende un singolo argomento intero n dalla riga di comando e crea albero binario di processi profondità n?

Questo programma richiede un sistema in grado di fare i processi. Non funzionerà in modo affidabile (o affatto) in un ambiente puramente interpretato come la console JavaScript di un browser Web. È progettato per sistemi simili a UNIX (Linux, MacOS).

Questo programma utilizza Python `Os.Fork ()` per la creazione di processo. Ricorda che la creazione di un gran numero di processi può sopraffare il tuo sistema. Test con piccoli valori di `n` prima.

`` `Python

Import OS

Import sys

def create_binary_tree (profondità, livello =0):

"" "

Crea ricorsivamente un albero binario di processi.

Args:

Profondità:la profondità desiderata dell'albero.

Livello:il livello corrente nell'albero (inizia a 0).

"" "

se livello print (f "processo {os.getpid ()} a livello {level}") # Stampa l'ID e il livello del processo

# Crea bambino sinistro

pid_left =os.fork ()

Se pid_left ==0:# Processo figlio

create_binary_tree (profondità, livello + 1)

Os._Exit (0) # IMPORTANTE:ESCIPA IL PROCESSO DEL COMPLETO PER EVITARE INFINITE RECUSIONE

# Crea un bambino giusto

pid_right =os.fork ()

Se PID_RIGHT ==0:# Processo figlio

create_binary_tree (profondità, livello + 1)

Os._Exit (0) # IMPORTANTE:ESCIPA IL PROCESSO DEL COMPLETO PER EVITARE INFINITE RECUSIONE

# Il processo genitore attende che i bambini finiscano (opzionale, ma buona pratica)

OS.WaitPID (PID_LEFT, 0)

OS.WaitPID (PID_RIGHT, 0)

Se __Name__ =="__main__":

se len (sys.argv)! =2:

Print ("Utilizzo:Python Binary_tree.py ")

sys.exit (1)

Tentativo:

profondità =int (sys.argv [1])

Se profondità <0:

Stampa ("La profondità deve essere un numero intero non negativo.")

sys.exit (1)

create_binary_tree (profondità)

Tranne ValueRror:

Stampa ("Valore di profondità non valido. Immettere un numero intero.")

sys.exit (1)

`` `

Come eseguire:

1. Salva: Salva il codice come `binary_tree.py`.

2. Esegui dalla riga di comando: `Python binary_tree.py ` dove `` è la profondità desiderata dell'albero (ad esempio, `python binary_tree.py 3`).

Considerazioni importanti:

* Gestione degli errori: Il codice include la gestione degli errori di base per argomenti di riga di comando non validi.

* Terminatura del processo: Le chiamate `Os._exit (0)` sono cruciali. Senza di loro, ogni processo per bambini creerebbe ricorsivamente più processi, portando a un'esplosione incontrollata dei processi.

* Utilizzo delle risorse: Sii consapevole della crescita esponenziale dei processi. Una profondità di 4 creerà già molti processi. Una profondità di 10 probabilmente si arresterà al sistema.

* Gestione del processo: Le chiamate `Os.waitpid ()` sono opzionali ma consigliate per una migliore gestione dei processi. Assicurano che il processo dei genitori attende che i suoi figli finiscano prima di uscire. Senza di loro, il processo dei genitori potrebbe terminare prima che alcuni processi figlio siano completati.

* Limitazioni del sistema operativo: Il numero massimo di processi che puoi creare è limitato dal sistema operativo.

Questa versione migliorata fornisce una migliore gestione degli errori e una gestione dei processi, rendendola più sicura e robusta. Ricorda di iniziare sempre con piccoli valori di `n` per testare e comprendere il comportamento prima di tentare valori più grandi.

 

Programmazione © www.354353.com