我正在一个使用 Python、Twisted 和 Redis 的项目中工作。因此团队决定使用 txredisapi 来进行 Python 模块和 Redis 之间的通信。这个项目做了很多不同的事情,我们需要订阅几个频道来监听 Redis 发送的消息,而不需要其他功能停止(异步)。
一个执行是否可以同时处理所有工作并监听 Redis 发送的消息,或者我们必须将代码分开并在不同的流中执行?
我们使用以下代码来监听消息:
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
我们尝试通过以下方式收听消息:
self.connRedisChannels = yield redis.ConnectionPool()
我很想知道如何指定 Connection 必须使用“RedisListenerFactory”,然后我猜当消息到达时会触发“messageReceived”函数。
任何建议、示例或更正将不胜感激。
谢谢!
下面的代码解决了这个问题:
from twisted.internet.protocol import ClientCreator
from twisted.internet import reactor
defer = ClientCreator(reactor, RedisListenerProtocol).connectTCP(HOST, PORT)
感谢 Philippe T. 的帮助。