Comments on: Le pattern observer en utilisant des décorateurs http://sametmax.com/le-pattern-observer-en-utilisant-des-decorateurs/ Du code, du cul Mon, 28 Oct 2019 11:54:55 +0000 hourly 1 https://wordpress.org/?v=4.9.7 By: Sam http://sametmax.com/le-pattern-observer-en-utilisant-des-decorateurs/#comment-3456 Fri, 23 Nov 2012 03:04:18 +0000 http://sametmax.com/?p=2591#comment-3456 Oui, mais avec le GIL, on n’a pas d’options non bloquantes valables en Python, c’est une des limitations du langage.

Il n’existe pas de possibilité de faire quelque chose de complètement asynchrones, même en utilisant des threads. Au mieux on peut faire:

– des threads / des coroutines qui au moins évitent de bloquer les IO.
– utiliser le module multiprocessing, mais ça veut dire créer un process pour chaque trigger.

Et dans tous les cas, ça veut dire des races conditions possibles sur les ressources partagées.

Bref, si on veut vraiment un truc asynchrone en Python (c’est rare, mais ça arrive), on doit se tourner vers des frameworks types twisted ou tornado, qui eux implémente le truc en C derrière.

]]>
By: anthony http://sametmax.com/le-pattern-observer-en-utilisant-des-decorateurs/#comment-3454 Fri, 23 Nov 2012 02:29:10 +0000 http://sametmax.com/?p=2591#comment-3454 Si je me trompe pas implémenté comme ça c’est bloquant, e.g. j’ai une seule fonction abonnée à ‘evenement1’, si je trigger deux fois de suite cet l’event

evenement.trigger(‘evenement1’)
evenement.trigger(‘evenement1’)

Et que la fonction abonnée bloque:

@evenement(‘evenement1’)
def reagir_a_evenement(evenement):
print “Oh, evenement ‘%s’ a eu lieu” % evenement
time.sleep(60)

Je verrai les 2 prints à 1min d’interval. Quelle serait la bonne solution pour faire qqch de complètement asynchrone ? Utiliser dans le décorateur evenement une thread pour lancer la fonction ?

]]>
By: Sam http://sametmax.com/le-pattern-observer-en-utilisant-des-decorateurs/#comment-2470 Mon, 15 Oct 2012 15:06:53 +0000 http://sametmax.com/?p=2591#comment-2470 ^^

]]>
By: Recher http://sametmax.com/le-pattern-observer-en-utilisant-des-decorateurs/#comment-2469 Mon, 15 Oct 2012 13:35:36 +0000 http://sametmax.com/?p=2591#comment-2469 C’est très chouette.

Dans le cas où vous voudriez mon opinion personnelle que j’ai, je vous dirais que je trouve cette ligne là :

evenement.abonnements = getattr(evenement, 'abonnements', {})

un peu bourrine et pas super compréhensible.

Si j’ai bien tout compris, le but, c’est d’initialiser l’attribut “abonnements” à un dictionnaire vide, dans le cas où il n’existe pas encore. Si il existe, on le laisse comme il est.

Si l’attribut existe déjà, ça revient à faire ça :

evenement.abonnements = getattr(evenement, 'abonnements')

Ce qui revient à faire ça :

evenement.abonnements = evenement.abonnements

On affecte l’objet à lui-même.
Ca ne dérange absolument pas le python de faire quelque chose de ce genre. Mais ça dérange l’humain qui lit le code. Il risque de se dire : “WTF ? C’est quoi l’intérêt ?”. (Alors que le vrai intérêt de cette ligne se trouve uniquement dans le cas où l’attribut n’existe pas).

Bref, moi je propose ça. C’est en deux lignes, mais ça me semble plus clair.

if not hasattr(evenement, 'abonnements'):
    evenement.abonnements = {}
]]>
By: Sam http://sametmax.com/le-pattern-observer-en-utilisant-des-decorateurs/#comment-2462 Sun, 14 Oct 2012 17:15:08 +0000 http://sametmax.com/?p=2591#comment-2462 @DSeed: oui, exactement.

@Soli: Il faut apprendre à ne pas mettre ce genre d’informations dans un exemple pédagogique. On parle de wraps dans le tutos sur les décorateurs, ici la notion expliquée est le pattern observer. Top d’info rend les explications confuses.

]]>
By: Soli http://sametmax.com/le-pattern-observer-en-utilisant-des-decorateurs/#comment-2461 Sun, 14 Oct 2012 17:12:42 +0000 http://sametmax.com/?p=2591#comment-2461 Et en général, pour faciliter le débogage notamment, on n’hésitera pas à utiliser http://docs.python.org/library/functools.html#functools.wraps pour conserver/rétablir le nom de la fonction « enveloppée ».

]]>
By: DSeed http://sametmax.com/le-pattern-observer-en-utilisant-des-decorateurs/#comment-2460 Sun, 14 Oct 2012 16:07:41 +0000 http://sametmax.com/?p=2591#comment-2460 Les signaux de django font pas la mm chose ? A part que les receivers sont des décorateurs (sans doute plus de liberté … )

]]>