我应该如何为Django Channels 2.0配置Redis?

2024-09-29 05:23:24 发布

您现在位置:Python中文网/ 问答频道 /正文

当我运行Django通道的工作线程作为后台任务时,有时会遇到一个错误。该任务使用一个开放的第三方WebSocket和一个名为Pysher的库,处理这些数据,然后通过通道层将结果数据发送到一组使用Redis(消息代理)监听我们的应用程序的WebSocket。在

我知道这个问题与Pysher库无关,因为如果我对通过通道层发送消息的代码进行注释,则不会出现问题。这个问题是因为在通道层发送消息,只是有时候会发生,很多时候发送成功,有时候会抛出错误,最后一个行为让我觉得可能跟Redis或者通道层及其配置或者类似的事情有关,也许Redis已经到了极限。在

错误消息

error from callback bound method Connection._on_message of Connection(Thread-2, started daemon 140614612023040):
[Errno 99] Cannot assign requested address

SO和Redis版本:Ubuntu 16+Redis 3.2

Pip依赖项

^{pr2}$

信道层配置

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": [("localhost", 6379)]
        },
    },
}

我的代码

# Synconsumer Class that runs as Channels Worker Background task
class BTWorker(SyncConsumer):

    # Class method
    def get_data(self, event):

        # Callback function that runs every time We receive a message from the thrid party Websocket
        def callback(*args, **kwargs):
            # Data processing
            raw_dict = json.loads(args[0])
            var_dict = {
                'id': raw_dict['id'],
                'other_key': other_value
            }
            var_list = [var_dict]

            # Send data via Channel Layer and Redis (CODE that generate the ISSUE!!)
            async_to_sync(self.channel_layer.group_send)(
                "group_name",
                {
                    "type": "some.type",
                    "text": json.dumps(trade_uni_list)
                }
            )

        # Websocket Third party connection handler
        def connect_handler(data):
            channel = pusher.subscribe('token')
            channel.bind('channel', callback)

        # Websocket Third Party connection via Pysher Library
        pusher = pysher.Pusher('******some_key****')
        pusher.connection.bind('pusher:connection_established', connect_handler)
        pusher.connect()

Tags: redis消息datathatvardef错误callback
1条回答
网友
1楼 · 发布于 2024-09-29 05:23:24

我知道这听起来很荒谬,考虑到它有时会起作用,但是你能把'localhost'切换到'127.0.0.1'并看看它是否可以修复吗?我发现某些python模块可能会被localhost混淆。。。即使它断断续续地工作。在

相关问题 更多 >