Asyncio: дождаться события из другого потокаPython

Программы на Python
Ответить
Anonymous
 Asyncio: дождаться события из другого потока

Сообщение Anonymous »

Я разрабатываю приложение на 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
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»