gpt4 book ai didi

python - txredisapi 异步订阅和监听

转载 作者:IT王子 更新时间:2023-10-29 06:01:39 27 4
gpt4 key购买 nike

我在一个使用 Python、Twisted 和 Redis 的项目中工作。因此,团队决定使用 txredisapi 进行 Python 模块和 Redis 之间的通信。这个项目做了很多不同的事情,我们需要订阅几个 channel 来收听 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()

我很想知道如何指定连接必须使用“RedisListenerFactory”,然后我猜当消息到达时将触发函数“messageReceived”。

我们将不胜感激任何建议、示例或更正。

谢谢!


下面的代码解决了这个问题:

from twisted.internet.protocol import ClientCreator
from twisted.internet import reactor

defer = ClientCreator(reactor, RedisListenerProtocol).connectTCP(HOST, PORT)

感谢 Philippe T. 的帮助。

最佳答案

如果你想直接使用 redis.Connection() 可能你可以这样做:

redis.SubscriberFactory.protocol = RedisListenerProtocol

进行内部调用的包是连接工厂。另一种方法是重写 *Connection 类并创建 *Connection 工厂以使用您的工厂。

要在代码的其他部分建立连接,您可以这样做:

from twisted.internet.protocol import ClientCreator
from twisted.internet import reactor

# some where :
defer = ClientCreator(reactor, RedisListenerProtocol).connectTCP(__HOST__, __PORT__)
# the defer will have your client when the connection is done

关于python - txredisapi 异步订阅和监听,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18591309/

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