gpt4 book ai didi

python - 使用 txredisapi 建立连接后订阅和取消订阅 channel

转载 作者:可可西里 更新时间:2023-11-01 11:43:43 25 4
gpt4 key购买 nike

使用 Python、Twisted、Redis 和 txredisapi。

如何在建立连接后获取用于订阅和取消订阅 channel 的 SubscriberProtocol?

我想我需要获取 SubscriberProtocol 的实例,然后我可以使用“订阅”和“取消订阅”方法但不知道如何获取它。

代码示例:

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 关键字,所以 deferred 不完整,订阅和取消订阅方法也不起作用。

最佳答案

connecting = ClientCreator(reactor, RedisListenerProtocol).connectTCP(HOST, PORT)
def connected(listener):
listener.subscribe("newChannelName")
listener.unsubscribe("channelName")
connecting.addCallback(connected)

关于python - 使用 txredisapi 建立连接后订阅和取消订阅 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18609430/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com