[Python] Mettere in pausa gli altri threads
Manlio Perillo
manlio.perillo a gmail.com
Mar 8 Ott 2013 12:56:51 CEST
On 04/10/2013 19:02, Marco Giusti wrote:
> [...]
> Senza (troppo) leggere il tuo codice, concettualmente allora è come
> avevo descritto nella mia prima email. Supponi che hai i due lock come
> ti avevo descritto, il worker si comporta più o meno così:
>
> def worker():
> while True:
> path = q.get()
> if os.path.exists(path) and override is ASK:
> with w:
> global override
> override = ask_dialog()
> with r:
> copy(path)
> q.task_done()
>
> questo è a larghe spanne quello che dovrebbe fare. I due lock sono
> speciali. r lo puoi acquisire solo se nessuno reclama w. w lo puoi
> acquisire solo se nessuno ha acquisito r. Così se due operazioni di
> copia sono in atto e una terza vuole sovrascrivere un file, la terza si
> blocca fintanto che le due precedenti non sono completate. Nuove
> operazioni di copia sono bloccate perché qualcuno reclama w. Quando w
> viene rilasciato, i worker possono di nuovo acquisire r.
>
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?
Ciao Manlio
Maggiori informazioni sulla lista
Python