[Python] aggiungere o distruggere una locked item in un dict mentre un'altro thread o asyncio lo legge/scrive per un'altra item?

alessandro medici alexxandro.medici a gmail.com
Gio 11 Feb 2016 19:07:15 CET


Intanto grazie mille della risposta cortese e soprattutto davvero molto
utile in particolare ed in generale.

Peccato solo che manchi il caso dict.__delitem__(item)

Si, in effetti uso asyncio in un thread, ma altri thread lavorano al
contempo sugli stessi dizionari e mi risulta che che Gil si sganci quando
entra in un thread.

Per locked intendo l'usare una context manager (di massima
multiprocessing.Lock: è atomica e perfettamente with compatibile :-) ma
riferita solo all'item specifica del dizionario su cui il thread sta
lavorando, con questo è ovvio che potrei segnalare a tutti i thread di
lasciare in pace i dizionari ove altri thread stanno lavorando, ma il tutto
mi rallenterebbe troppo il flusso del programma.

Pensavo quindi di usare il lock solo come indicatore di non lavorare su
quella singola item di ogni specifico dizionario. Ed è per questo che
volevo sapere cosa succede quando un thread fa una richiesta sul valore di
una item mentre un altro thread ne modifica (credo che in questo caso non
abbia importanza) o ne cancella o inserisce un'altra (e qui la cosa si fa
più preoccupante. Ovvio che non userò iteratori su quei dizionari: mi
incazzerei anch'io se mi togliessero la sedia dal sedere mentre ci sto
seduto sopra :-)

In questo momento quindi mi stavo scrivendo un programma che andasse a
vedere in pratica cosa potrebbe succedere: l'idea sarebbe forzare
collisioni sullo stesso dizionario di solo sei item mettendo su quattro
thread che random leggono/scrivono/cancellano/aggiungono.

In effetti però, sarebbe bello se qualcuno sapesse già la risposta e magari
anche il perché della stessa.

E grazie di nuovo.
​
Alex
-------------- parte successiva --------------
Un allegato HTML è stato rimosso...
URL: <http://lists.python.it/pipermail/python/attachments/20160211/7508be99/attachment.html>


Maggiori informazioni sulla lista Python