[Python] Mettere in pausa gli altri threads

Luca luca800 a gmail.com
Mer 9 Ott 2013 12:02:22 CEST


> Per caso mi è capitato di pensare un po' al tuo problema e mi sono detto
> che c'è qualcosa che non va'. Tu hai due casi ogni volta che copi un
> file: la destinazione esiste oppure no. Se la destinazione non esiste
> il thread non viene in qual modo influenzato e quindi non c'è necessità
> che si blocchi in attesa di una risposta dell'utente. Mi sbaglio forse?
> Perché in questo caso un lock banale risolve il tuo problema.



> Supponiamo di avere, nell'ordine, queste richieste di copia
>
> copy a b
> copy c d
> copy e f
>
> questo significa che la terza operazione, se vuole sovrascrivere f,
blocca tutte le altre anche se non hanno nulla a che fare con f?

Allora....

 - Ho una lista di files che viene generata tramite filtri di inclusione
e/o esclusione.
 - Questa lista viene passata al ciclo che esegue la copia file per file.
 - Per ogni file viene lanciato un Thread (con possibilità di limitare il
numero di thread)
 - Durante la copia uno o più o tutti i file possono essere già presenti
nella/e cartella/e di destinazione.
 - In caso venga chiamato con il parametro --overwrite=ASK, lo script, al
PRIMO file esistente che trova deve bloccare tutto quindi:
   1 - Threads già avviati ma che non hanno ancora fatto la verifica di
os.path.exists (in effetti se è il primo gli altri non ci sono ancora
arrivati)
   2 - Ovviamente bloccare eventuali nuovi thread sul nascere.
   3 - Attendere una risposta dall'utente.
   4 - Reimpostare il parametro overwrite *globale*.
   5 - Riprendere da dove si era fermato.

A questo punto l'overwrire non sarà più ASK ma YES o NO, a seconda dei
casi, e i rimanenti thread si comporteranno di conseguenza.

Da notare che l'utilizzo dei thread è più per una questione grafica
(progress bar multiple) che per una questione pratica. E che comunque non
mi pare molto ultile la conferma da parte dell'utente se poi si propaga per
tutti i file, a quel punto chiamare lo script con --overwrite=YES o NO è
più logico. Credo io.

ciao
Luca
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20131009/be51dd64/attachment.html>


Maggiori informazioni sulla lista Python