Есть ли возможность организовать не блокирующее ожидание соединения в Socket + Python? Micropython (python3)
На стадии socket.accept() программа подвисает на этом моменте и мне это не допустимо.
Есть внутри цикл с основной логикой while True: который прерывать нельзя.
Так вот вопрос. Можно ли внутри цикла while True: отследить подключение и передать в функцию обработчика , чтоб та ответила клиенту, но цикл на стадии ожидания соединения не прерывать?

21 Авг 2019 в 06:39
202 +1
0
Ответы
1

Да, можно организовать не блокирующее ожидание соединения в Socket + Python, используя асинхронный ввод-вывод (Asynchronous I/O).

В Micropython (Python 3) вы можете использовать модуль uasyncio для организации асинхронного ввода-вывода. Этот модуль предоставляет возможность запускать несколько задач одновременно, что позволяет не блокировать основной цикл программы.

Пример использования uasyncio для не блокирующего ожидания соединения:

import uasyncio as asyncio
import usocket as socket
async def handle_client(reader, writer):
data = await reader.read(100)
response = "Hello, client!"
await writer.awrite(response)
async def accept_clients(server):
while True:
client_sock, _ = server.accept()
reader, writer = client_sock.makefile('rwb')
asyncio.create_task(handle_client(reader, writer))
async def main():
server = socket.socket()
server.bind(("0.0.0.0", 8080))
server.listen(5)
asyncio.create_task(accept_clients(server))
while True:
await asyncio.sleep_ms(1000) # основной цикл без блокировки
asyncio.run(main())

В этом примере цикл "while True" основной логики программы не блокируется на стадии ожидания соединения. Функция handle_client обрабатывает данные от клиента, а функция accept_clients принимает новые соединения и передает их на обработку.

20 Апр в 13:15
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 91 905 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир