Je travaille actuellement avec la bibliothèque AMQP pika. Ce que je veux développer, c'est un gestionnaire de contexte ou un décorateur qui assure l'établissement d'une connexion avec Rabbit. Le problème est qu'il est impossible d'utiliser des générateurs à l'intérieur des décorateurs car ils doivent retourner une fonction appelée. L'exemple suivant soulève une exception :
def ensure_conn(func):
@gen.coroutine
def wrapper(self, *args, **kwargs):
yield self.connection.ensure_connection()
return func(*args, **kwargs)
return wrapper
Le problème est presque le même avec les gestionnaires de contexte. Il est impossible d'utiliser yield deux fois. L'exemple suivant soulève l'exception que le générateur ne s'est pas arrêté.
@contextlib.contextmanager
@gen.coroutine
def ensure_conn(self):
yield self.ensure_connection()
yield
Veuillez recommander une autre approche ? Bien sûr, je suis déjà satisfait des simples appels de coroutine. Je vous remercie.