通道使用者是否在Django中阻止了普通HTTP?

问题描述 投票:0回答:1

我正在本地运行开发服务器

python manage.py runserver 8000

然后,我运行一个脚本,在下面使用消费者”>

from channels.generic.websocket import AsyncJsonWebsocketConsumer

class MyConsumer(AsyncJsonWebsocketConsumer):
    async def connect(self):
        import time
        time.sleep(99999999)
        await self.accept()

一切正常,消费者如预期的那样睡了很长时间。但是,我无法从浏览器访问http://127.0.0.1:8000/

在现实生活中,问题更大,因为使用者需要向同一服务器发出HTTP请求-并最终陷入僵局。

这是预期的行为吗?运行缓慢的使用者时,如何允许呼叫服务器?

我正在本地运行开发服务器python manage.py runserver 8000,然后运行一个脚本,该脚本消耗了channels.generic.websocket import AsyncJsonWebsocketConsumer ...]下面的使用者,] >>

由于这是您应使用的async功能,但要使用asynciosleep

import asyncio

from channels.generic.websocket import AsyncJsonWebsocketConsumer

class MyConsumer(AsyncJsonWebsocketConsumer):
    async def connect(self):
        await asyncio.sleep(99999999)
        await self.accept()

如果使用time.sleep,则将sleep整个Python线程。

这也适用于发出上游HTTP请求时,您需要使用asyncio http库而不是同步库。 (基本上,您应该等待任何可能需要的时间)

asynchronous deadlock django-channels
1个回答
0
投票

由于这是您应使用的async功能,但要使用asynciosleep

© www.soinside.com 2019 - 2024. All rights reserved.