Каналы потребителя блокируют нормальный HTTP в Django? - PullRequest
1 голос
/ 12 февраля 2020

Я работаю на сервере разработки локально

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-запрос на тот же сервер - и, по сути, оказывается в тупике.

Это ожидаемое поведение? Как разрешить вызовы на мой сервер во время работы медленного потребителя?

1 Ответ

1 голос
/ 13 февраля 2020

, поскольку это async функция, которую вы должны, но с использованием asyncio 'sleep.

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, а не библиотеку синхронизации. (в основном вы должны ожидать всего, что ожидается в любое время)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...