[Python] cambiare i valori dei parametri a runtime

Manlio Perillo manlio_perillo a libero.it
Ven 30 Gen 2009 16:02:15 CET


Fabrizio Mancini ha scritto:
 > [...]
> Non mi è chiara una cosa, probabilmente non riesco a inquadrare la 
> soluzione che mi serve.
> Approfitto della tua gentilezza e disponibilità subito! :-)

Prego!

> La mia applicazione processa dei file, solitamente è una lista di file 
> (arrivano o da un file di testo, o da un db).
> lo script principale usa un thread pool per fare lo spawn dei processi e 
> scodano la queue che incamera i dati.
> Ogni sottoprocesso prende come argomento da riga di comando il nome del 
> file da trattare.
> Se il sottoprocesso termina senza problemi allora il thread che l'aveva 
> in carico fa lo spawn di un altro sottoprocesso, altrimenti il thread lo 
> ammazza dopo 30 secondi se non ha completato.
> I thread li ho usati per avere una concorrenza vera e propria sulle 
> operazioni sui files, cioè per avere un numero di processi contemporanei 
> elevato. Attualmente il processo gira su una macchina solaris / sparc a 
> 16 core e quindi faccio lo spawn di almeno 16 processi.
> Non mi è chiaro come fare lo spawn di più processi senza usare una 
> tecnica del genere.


Questi processi esterni sono scritti da te?
Scrivono su una pipe che tu devi leggere dal processo principale?


Se i processi sono scritti da te, allora potresti far processare ad un 
processo più di un file, sempre uno alla volta.

Potresti creare un process pool, ed inviare i files da processare.

Non è banale, io ti consiglio di usare Twisted che ha già tutto pronto.

 > [...]
 >
>     Dovresti trovare un esempio di come fare tutto questo in
>     http://pypi.python.org/pypi/Spawning/0.8.10
> 
> ottimo lo guardo subito!
>  

No, lascia stare :).

Non ti serve una cosa così complessa.
Usa semplicemente un segnale (come SIGHUP) per notificare il processo 
che deve rileggere la configurazione.

Assicurati però di poter effettivamente modificare il comportamento del 
programma a run time.

Su Windows potrebbe essere un problema, in quel caso potresti usare un 
socket o named pipe.



Ciao  Manlio Perillo


Maggiori informazioni sulla lista Python