[Python] thread e subprocess

Manlio Perillo manlio.perillo a gmail.com
Mer 29 Ott 2014 17:15:26 CET


On Wed, Oct 29, 2014 at 2:52 PM, Antonio Conte <barbone67 a gmail.com> wrote:

> salve a tutti,
>
> sto lavorando su uno script che lancia su piu' client un comando.

per il momento sto usando subprocess, ma volevo lanciare i processi in
> parallelo
> e ricavare l'output mano a mano che i processi terminano.
>
>
I processi li lanci in parallelo con subprocess.  Il problema è
l'interazione.


> tenete conto che lo script va lanciato da cron, e mi serve l'output del
> comando
> per inviarlo via mail.
>
dopo varie prove sono arrivato a questo, ma mi chiedevo se fosse il modo
> giusto
> (cioe' l'utilizzo del contatore _act) per aspettare che tutti i processi
> terminino e per leggere dalla queue l'output.
>
>
Nel codice del thread ti suggerisco di usare la funzione
subprocess.check_output.

In generale io proverei ad usare multiprocessing.Pool ed il metodo map.
Purtroppo non esiste l'analogo Pool nel modulo threading, però da una
veloce ricerca è venuta fuori questa "sorpresa":
http://stackoverflow.com/questions/3033952/python-thread-pool-similar-to-the-multiprocessing-pool

>>> from multiprocessing.pool import ThreadPool

usando ThreadPool.map il tuo codice diventa molto più semplice ed inoltre
non soffri del problema che ti ha segnalato Daniele su troppi
processi/thread in esecuzione.

Se sei curioso esiste anche una alternativa senza usare un thread o
processo di supporto, ma è più complesso e non trovi nulla di pronto nella
stdlib (forse qualcosa in Python 3.x).

> [...]


Ciao  Manlio
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20141029/ebce3e0f/attachment.html>


Maggiori informazioni sulla lista Python