#python #multithreading #python-asyncio
Вопрос:
У меня есть matplotlib, работающий в основном потоке с живым графиком данных, поступающих из внешнего источника. Для обработки входящих данных у меня есть простой прослушиватель UDP, прослушивающий пакеты с помощью asyncio, с циклом событий, запущенным в отдельном потоке.
Теперь я хочу добавить больше источников, и я хотел бы запустить их слушателей в том же цикле/потоке, что и первый. Для этого я просто передаю объект цикла классам, реализующим прослушиватели, и их конструктор добавляет в цикл задачу, которая инициализирует и запускает прослушиватель.
Однако, поскольку эти классы инициализируются в основном потоке, я вызываю loop.create_task(...)
функцию оттуда, а не из потока цикла. Вызовет ли это какие-либо проблемы?
Комментарии:
1. Ответ-нет. Я немного подробнее расскажу.
Ответ №1:
Ответ-нет, использование loop.create_task(...)
для планирования сопрограммы из другого потока не является потокобезопасным, вместо этого используйте asyncio.run_coroutine_threadsafe (…).