Python、Twisted、Redis、txredisapi での作業。
接続が確立された後、チャンネルを購読および購読解除するための SubscriberProtocol を取得するにはどうすればよいですか?
SubscriberProtocol のインスタンスを取得する必要があると思います。その後、「subscribe」および「unsubscribe」メソッドを使用できますが、取得方法がわかりません。
コード例:
import txredisapi as redis
class RedisListenerProtocol(redis.SubscriberProtocol):
def connectionMade(self):
self.subscribe("channelName")
def messageReceived(self, pattern, channel, message):
print "pattern=%s, channel=%s message=%s" %(pattern, channel, message)
def connectionLost(self, reason):
print "lost connection:", reason
class RedisListenerFactory(redis.SubscriberFactory):
maxDelay = 120
continueTrying = True
protocol = RedisListenerProtocol
次に、これらのクラスの外から:
# I need to sub/unsub from here! (not from inside de protocol)
protocolInstance = RedisListenerProtocol # Here is the problem
protocolInstance.subscribe("newChannelName")
protocolInstance.unsubscribe("channelName")
なにか提案を?
ありがとう!
次のコードは問題を解決します。
@defer.inlineCallbacks
def subUnsub():
deferred = yield ClientCreator(reactor, RedisListenerProtocol).connectTCP(HOST, PORT)
deferred.subscribe("newChannelName")
deferred.unsubscribe("channelName")
説明: "ClientCreator" を使用して、フラグ "@defer.inlineCallbacks" を持つ関数内で SubscriberProtocol のインスタンスを取得します。遅延データの完了を待機するための "yield" キーワードを忘れないでください。次に、この deferred を使用して、購読および購読解除できます。
私の場合、yield キーワードを忘れたため、遅延が完了せず、メソッドの登録と登録解除が機能しませんでした。