Я разрабатываю приложение на Python, которое должно обращаться к машине для выполнения некоторых (длительных) задач. Модуль asyncio кажется хорошим выбором для всего, что связано с сетью, но теперь мне нужен доступ к последовательному порту для одного конкретного компонента. Я реализовал своего рода уровень абстракции для реального последовательного порта, но не могу понять, как разумно интегрировать его с asyncio.
Следующая настройка: у меня есть поток, выполняющий цикл, который регулярно общается с машиной и декодирует ответы. Используя метод enqueue_query(), я могу поместить строку запроса в очередь, которая затем будет отправлена машине другим потоком и вызовет ответ. Передавая threading.Event (или что-нибудь с помощью метода set()), вызывающая сторона может выполнить блокирующее ожидание ответа. Тогда это может выглядеть примерно так:
Код: Выделить всё
f = threading.Event()
ch.enqueue_query('2 getnlimit', f)
f.wait()
print(ch.get_query_responses())
Моя цель сейчас — поместить эти строки в сопрограмму и заставить asyncio обрабатывать это ожидание, чтобы приложение тем временем могло делать что-то еще. Как я мог это сделать? Вероятно, это сработает, если обернуть f.wait() в Executor, но это кажется немного глупым, поскольку в этом случае будет создан новый поток только для того, чтобы ждать, пока другой поток что-то сделает.
Подробнее здесь:
https://stackoverflow.com/questions/330 ... her-thread