Django каналы async долгоживущих событий / потоков
Как можно реализовать непрерывный поток с помощью websockets (желательно с django-channels)?
Мой код постоянно посылает сообщение. Я хотел бы иметь возможность запускать/останавливать его, но на данный момент он не реагирует на стороне сервера на событие запуска/остановки (оператор печати не появляется). Такое впечатление, что весь потребитель блокирует поток, хотя он асинхронный. Я не могу понять, как это реализовать.
import asyncio
import json
from channels.generic.websocket import AsyncWebsocketConsumer
class ChatConsumer(AsyncWebsocketConsumer):
pause = False
async def connect(self):
await self.accept()
await self._main_loop()
async def disconnect(self, close_code):
pass
async def receive(self, text_data):
text_data_json = json.loads(text_data)
print(text_data_json)
pause = text_data_json["pause"]
self.pause = bool(pause)
async def _main_loop(self):
while True:
if not self.pause:
await self.send(text_data=json.dumps({"message": "play"}))
else:
await self.send(text_data=json.dumps({"message": "pause"}))
await asyncio.sleep(1)