[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