La parte rilevante del codice simile a questo:La deposizione delle uova e in attesa di processi figlio in Python
pids = []
for size in SIZES:
pids.append(os.spawnv(os.P_NOWAIT, RESIZECMD, [RESIZECMD, lotsOfOptions]))
# Wait for all spawned imagemagick processes to finish
while pids:
(pid, status) = os.waitpid(0, 0)
if pid:
pids.remove(pid)
Ciò dovrebbe fare è la deposizione delle uova tutti i processi off, quindi in attesa per ogni processo per terminare prima di continuare . Quello che fa è lavoro per la maggior parte, ma a volte si blocca nella sezione successiva (quando si aspetta che tutti questi processi siano finiti).
C'è qualcosa di sbagliato in questo? C'è un modo migliore per farlo?
L'ambiente su cui deve lavorare è CentOS con Python 2.4, ma sto testando su Cygwin con Python 2.5, quindi potrebbe essere che non funzioni sulla mia macchina ma funzionerà su quella Linux (la macchina Linux è molto lento e questo errore è raro, quindi non sono stato in grado di farlo lì).
Sono confuso sul perché avrei bisogno di installare quel modulo, quando 'subprocess.Popen()' funziona bene in Python 2.4 –
@Brendan, correzioni di bug importanti, esp. per i programmi che utilizzano sia il sottoprocesso che i thread - che è menzionato nella pagina breve a cui ti ho indirizzato, è l'intero 2 ° paragrafo. C'è qualche ragione per cui hai bisogno della lista completa delle correzioni ...? Gestione EINTR, non più problemi con FD di grandi dimensioni, non più FD/gestire perdite ... –
Oh capisco. Ho chiesto perché questo è un progetto di lavoro ed è molto più semplice se non devo installare nulla di nuovo. Grazie. –