現在、AMQP pika ライブラリを使用しています。私が開発したいのは、Rabbit への接続確立を保証するコンテキスト マネージャーまたはデコレータです。呼び出された関数を返す必要があるため、デコレーター内でジェネレーターを使用できないという問題。次の例では、例外が発生します。
def ensure_conn(func):
@gen.coroutine
def wrapper(self, *args, **kwargs):
yield self.connection.ensure_connection()
return func(*args, **kwargs)
return wrapper
コンテキストマネージャーにもほぼ同じ問題があります。yield を 2 回使用することはできません。次の例では、ジェネレーターが停止しないという例外が発生します。
@contextlib.contextmanager
@gen.coroutine
def ensure_conn(self):
yield self.ensure_connection()
yield
別のアプローチをお勧めしますか? もちろん、単純なコルーチンの呼び出しにはすでに満足しています。ありがとうございました。