Loop.subprocess_shell => как писать и читать из разных каналов asyncio django методами

Я пытаюсь реализовать ssh-клиент с помощью django & django-channels.

При поступлении запроса через websocket метод connect создает подпроцесс и запускается новый "терминал".

Затем, когда приходит следующее сообщение от клиента, метод receive обрабатывает запрос, и вот в чем моя проблема... Я не знаю, как отправить сообщение в подпроцесс shell, созданный на методе "connect"

Помощь будет оценена по достоинству.

PS: Я сделал такое же решение с pty.fork & select.select и оно работает, но я думаю, что это не совсем масштабируемо, поскольку нам нужно много терминалов, работающих одновременно.

class ShellConsumerAsync(AsyncWebsocketConsumer):

    async def connect(self):
        ...
        self.accept()
        ...    
        sub_process = await create_subprocess_shell(command,
                                                    stdin=async_subprocess.PIPE,
                                                    stdout=async_subprocess.PIPE,
                                                    stderr=async_subprocess.PIPE)
        ...

    async def receive(self, message):

        ...
        # Write to sub_process created here => (self.connect)

        # check read availability on sub_process 
        # something like select.select or asyncio.add_reader

        # message = await asyncio.wait_for(sub_process.stdout.read), timeout=15)
        ...
        # Send message to room group
        await self.channel_layer.group_send(
            self.room_group_name,
            {
                'type': 'channel_gr_message',
                'message': message
            }
        )
Вернуться на верх