【发布时间】:2020-07-21 22:33:38
【问题描述】:
我创建了一个简单的 Django Channels 消费者,它连接到 Redis 通道并从该通道接收一些数据,我想将这些数据发送到前端。
消费者能够连接到消费者并接收数据;问题是,如果我在消费者运行时尝试加载页面,页面将在加载时卡住。我确定发生这种情况是因为与 Redis 通道的连接是阻塞操作,或者可能是线程问题。我是这个概念的新手,所以我决定提出一个问题。
这是我的消费者:
class EchoConsumer(AsyncConsumer):
async def websocket_connect(self, event):
self.send({
'type': 'websocket.accept'
})
self.receive(event)
def receive(self, event):
redis_url = 'redis://localhost:6379/0'
connection = redis.StrictRedis.from_url(redis_url, decode_responses=True)
channel = 'TEST'
params = urllib.parse.parse_qs(self.scope.get('query_string', b'').decode('utf-8'))
pubsub = connection.pubsub(ignore_subscribe_messages=True)
pubsub.subscribe(channel)
for message in pubsub.listen():
# self.send({
# 'type': 'websocket.send',
# 'text': message['data'],
# })
print(message['data'])
async def websocket_disconnect(self, event):
print('DISCONNECTED!')
所以发生的情况是我可以看到正在打印到控制台的数据,但是如果我尝试离开该页面并到达我网站的其他部分,该页面将在加载时卡住。谁能帮我解决这个问题?
【问题讨论】:
标签: python django redis django-channels