Мне трудно понять причину кода ниже, надеюсь, кто-то может пролить свет на это. Я новичок в асинхронном программировании.
Это из паутины документация
#!/usr/bin/env python
import asyncio
import websockets
async def echo(websocket, path):
async for message in websocket:
await websocket.send(message)
asyncio.get_event_loop().run_until_complete(
websockets.serve(echo, 'localhost', 8765))
asyncio.get_event_loop().run_forever()
У меня есть несколько вопросов о дизайне asyncio и о том, как я могу этим воспользоваться.
Прежде всего, глядя на последние две строки. Если я правильно понимаю, не должно ли run_until_complete завершить работу после завершения своей работы? Как может второй цикл сохранить его без каких-либо заданий, переданных в цикл?
Во-вторых, я пытался создать back_end, который может обрабатывать некоторые данные из front_end с помощью веб-сокетов и возвращать вычисления в реальном времени. Будет два вида задач, одна из которых будет немного длиннее, для которой потребуется немного вычислительной мощности, но это будет происходить один раз для сеанса, и куча потоковых данных, которые необходимо немедленно отправить обратно (90 кадров в секунду).
Для более крупных задач, должен ли я просто запустить другой сервер веб-сокетов, который обрабатывает более длительную работу, и использовать основной веб-сокет для его использования? Или использовать другой процесс для выполнения работы в связанной асинхронной функции? А что касается небольших задач, что может пойти не так, если я сделаю то же, что и выше?
TLDR:
- Асинхронное программирование бьет меня по голове.
- Поддержка неблокирующего сеанса
- Какие процессы тяжелой работы и легкой работы одновременно
- Легкая работа должна иметь нулевую задержку
- Тяжелая работа должна быть максимально быстрой, но не должна влиять на работу света.
Спасибо !!