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
_______________________________________________
Python mailing list
Python@lists.python.it
http://lists.python.it/mailman/listinfo/python