OVH Cloud OVH Cloud

(petite) Déception sur l'aspect dynamique

12 réponses
Avatar
Do Re Mi chel La Si Do
Bonsoir !

Le message "dictionary changed size during iteration" m'a un poil déçu, sur
l'aspect dynamique des itérations.
Bon, ce n'est pas un problème grave ; je ne vais pas brûler une voiture pour
ça...
C'est plutôt histoire de bavarder.

@-salutations

Michel Claveau

10 réponses

1 2
Avatar
Laurent Pointal
Do Re Mi chel La Si Do wrote:
Bonsoir !

Le message "dictionary changed size during iteration" m'a un poil déçu, sur
l'aspect dynamique des itérations.
Bon, ce n'est pas un problème grave ; je ne vais pas brûler une voiture pour
ça...
C'est plutôt histoire de bavarder.


Tu as la solution d'utiliser une version qui n'itère pas sur le dico
lui-même, mais sur ses clés/valeurs/couples (iteritems -> items & Co).

Sinon, ça me parait correct (et même bien) que Python te prévienne que
pendant une itération sur le dictionnaire, celui-ci a été modifié.
Comment doit se comporter l'itérateur? En cas d'ajout? En cas de
suppression? En cas de modification? Pas simple la sémantique d'une
itération sur quelque chose qui se modifie...

Perso, j'ai déjà eu du code d'itération sur des listes que je savaient
pouvoir être modifiées par d'autres threads, et ça donnait:
for x in maliste[:] :
...
(sachant que la copie de liste est une opération atomique au niveau de
l'interpréteur).

A+

Laurent.

Avatar
Eric Deveaud
Laurent Pointal wrote:

(sachant que la copie de liste est une opération atomique au niveau de
l'interpréteur).


tu peux détailler stp.
j'avoue avoir du mal à concevoir une opération non couteuse pour la recopie
d'une liste.

Eric

--
J'ai mplayer2 qui fait des siennes Quand je veux téléchargé une
bande-annonce ou autre vidéo. mplayer2 se met en lecture. En conclusion
mon micro ne télécharge pas et mon patron gueule comme un putoi.
-+- MN in <http://neuneu.mine.nu/> - Vidéo et des bas -+-

Avatar
mattdo
On 2005-11-17, Eric Deveaud wrote:
Laurent Pointal wrote:

(sachant que la copie de liste est une opération atomique au niveau de
l'interpréteur).


tu peux détailler stp.
j'avoue avoir du mal à concevoir une opération non couteuse pour la recopie
d'une liste.


Euh une question un peu OT, opération atomique == opération non
couteuse?

Moi j'interprète le post de Laurent, plutot dans le sens: opération
atomique == opération qui ne peut etre perturbée. Bref avec une sorte
de lock ou autre pour que les datas de la liste source ne soient pas
modifies pendant la copie.

Enfin effectivement, il me semble qu'il est plutot bon d'itérer sur une
liste stable...

--
mattdo


Avatar
remi_inconnu

Bonsoir !

Le message "dictionary changed size during iteration" m'a un poil déç u, sur
l'aspect dynamique des itérations.
Bon, ce n'est pas un problème grave ; je ne vais pas brûler une voitu re pour
ça...
C'est plutôt histoire de bavarder.

@-salutations

Michel Claveau
Personnellement je ne trouve pas bien normal que l'on modifie un

dictionnaire pendant qu'on le consulte. Si c'est un autre thread qui le
modifie, un mutex est de rigueur, si c'est dans le parcours, un
changement d'algorithme s'impose. Si tu as l'occasion d'utiliser
d'autres langages comme le C++ avec les STL, tu risques au mieux de ne
pas voir le problème, au pire un crash bien sale de l'application,
dans tous les cas il vaut mieux éviter une modification durant la
consultation, et c'est une chance que python t'avertisse...

Avatar
Laurent Pointal
Eric Deveaud wrote:
Laurent Pointal wrote:


(sachant que la copie de liste est une opération atomique au niveau de
l'interpréteur).



tu peux détailler stp.
j'avoue avoir du mal à concevoir une opération non couteuse pour la recopie
d'une liste.


Le fameux GIL (Global Interpreter Lock) de C-Python [1].

Rapidement, les threads Python, lorsqu'ils interprètent les scripts
compilés en byte-code, utilisent un mutex global -le GIL- qui protège
l'ensemble des objets Python (et en Python tout est objet) contre les
accès concurrents.
Chaque thread acquière le GIL, effectue une série [2] d'opérations
"atomiques", puis relache le GIL [3]. Et donc, la copie d'une liste
Python est une opération atomique de l'interpréteur - même si elle peut
être coûteuse au niveau de la machine.

Voilà.

A+

Laurent.


[1] Pour Jython, je n'en sais rien.
[2] Cf sys.getcheckinterval().
[3] Les éléments de code compilés natif, lorsqu'ils n'ont pas à accéder
aux objets Python (calculs, entrées/sorties, renvoi vers des
bibliothèques de GUI), relachent généralement le GIL, permettant à
l'interpréteur de donner la main à un autre thread, et ré-acquièrent le
GIL lorsqu'ils ont à nouveau besoin d'accéder à la machinerie Python.


Avatar
Do Re Mi chel La Si Do
Salut !


J'ai dit que c'était pour bavarder, et me voilà servi !

Il y a des moments où je rejoindrais presque l'opinion de ceux qui disent
que l'informatique est en phase de régression.

J'ai l'impression que l'on est revenu 20 ans en arrière, à parler des
verrouillages optimistes ou pessimistes, du domaine d'application des
verrous (leurs types), du comportement ACID des transactions, de leur niveau
d'isolement, de la normalisation/dénormalisation des dictionnaires, etc.

Ça va être chouette : on va s'étriper, virtuellement, à grand coups
d'opinions toutes faites, émaillées de citations d'illustres inconnus.

Un rêve de troll, finalement...


@-salutations

Michel Claveau
Avatar
Do Re Mi chel La Si Do
Bonjour !

D'accord pour l'importance de l'atomicité des opérations utilisées. Mais il
manque les notions de cohérence, d'isolation (quoique, avec le GIL, on est
pas mal), et de durabilité. Notamment si l'opération en question ne s'est
pas bien passée.

@-salutations

Michel Claveau
Avatar
remi_inconnu
Désolé si j'ai été un peu sec, je m'excuse... ;-)

Mais je veux bien revenir 20 ans en arrière et retrouver mon atari ou
mon ZX 81 pour programmer des soirées entières en assembleur, quoique
maintenant après avoir gouté Python j'aurai un peu de mal, et puis
avoir de nouveau 20 ans, ce serai le rêve...

;-)
Avatar
Hervé Cauwelier
et puis avoir de nouveau 20 ans, ce serai le rêve...


Des boutons et pas d'argent ? ;-)

--
Hervé Cauwelier
http://www.oursours.net/

Avatar
Do Re Mi chel La Si Do
20 ans, il y a 20 ans ? Encore un gamin !



MCI
1 2