[Python] Mettere in pausa gli altri threads
Marco Giusti
marco.giusti a gmail.com
Ven 4 Ott 2013 19:02:34 CEST
On Fri, Oct 04, 2013 at 04:52:40PM +0200, Luca wrote:
> Il giorno 04 ottobre 2013 15:34, Marco Giusti <marco.giusti a gmail.com> ha
> scritto:
>
> >
> > Perdonami, puoi spiegarmelo come se avessi cinque anni? Sembra, da come
> > lo descrivi, che la copia di un file debba essere interrotta a metà per
> > poi riprendere con una politica differente. Invece il tuo codice sembra
> > dire il contrario, ovvero una copia deve essere finita sempre con la
> > politica con cui ha iniziato ma ogni nuova copia deve o aspettare una
> > risposta o utilizzare la politica selezionata.
> >
> Beh a dire il vero è opinione comunque che io sia un genio ad esporre male
> le cose :\
>
> in effetti è come dici tu. è la nuova copia che parte che deve aspettre
> una risposta.
> Solo che la verifica vene fatta dentro al worker.
>
> Ti pastobinno la funzione operaia con le modifiche che stavo cercando di
> testare sullo script di test.
> Magari così capisci meglio che intendo e magari mi indicate altri errori di
> concetto.
>
> http://pastebin.com/rFLzW7xy
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.
Ti allego un esempio con il lock preso qui[1].
Ciao
Marco
[1] http://code.activestate.com/recipes/577803-reader-writer-lock-with-priority-for-writers/
-------------- parte successiva --------------
Un allegato non testuale è stato rimosso....
Nome: rwlock.py
Tipo: text/x-python
Dimensione: 3304 bytes
Descrizione: non disponibile
URL: <http://lists.python.it/pipermail/python/attachments/20131004/e524a7b1/attachment-0001.py>
Maggiori informazioni sulla lista
Python