Обработка нескольких служб блокировки ввода-вывода с использованием asyncioPython

Программы на Python
Ответить
Anonymous
 Обработка нескольких служб блокировки ввода-вывода с использованием asyncio

Сообщение Anonymous »

Это не обязательно должен быть вопрос о Python, скорее, речь может идти об асинхронном программировании в целом. Короче говоря, у меня есть неопределенное количество объектов, каждый из которых выполняет свою операцию, запуская функцию, которая по сути действует как бесконечный цикл (часто содержит while True). Эти функции для нескольких объектов выполняются параллельно (на данный момент они не обмениваются данными между собой, а вместо этого используют обратные вызовы или отправляют данные в третье место без передачи данных назад).
Например, предположим, что у меня есть объекты класса Poller (poller1, poller2, poller3 и т. д. до poller) с функцией «чтения» (содержит бесконечный цикл). Точно так же у меня есть объекты класса Listener (listener1, Listener2, Listener3 и так далее до Listenern).
Эти функции используют асинхронные и асинхронные вызовы, и все работает так, как я задумал. Однако я не уверен, что это правильный подход для этой задачи и можно ли ее решить более эффективно.
Функция, которая запускает мой код, выглядит следующим образом:

Код: Выделить всё

async def loop(self):
...
tasks = [
asyncio.create_task(device.read())
for poller in self.pollers
]

tasks.extend(
[
asyncio.create_task(listener.start())
for listener in self.listeners
]
)

for task in tasks:
await task
Я упростил код, чтобы сосредоточиться на сути проблемы. Мой вопрос в основном заключается в том, является ли это адекватным способом решения проблемы и есть ли какие-либо очевидные недостатки, которые могут затруднить расширение этой функциональности.

Подробнее здесь: https://stackoverflow.com/questions/792 ... ng-asyncio
Ответить

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

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

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

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

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