В документации Python (v3.8.2) о многопоточности есть следующий текст (гл. 17): «Класс Thread в Python поддерживает подмножество поведения класса Thread в Java; в настоящее время приоритетов нет, нет групп потоков, и потоки не могут быть уничтожены, остановлены, приостановлены, возобновлены или прерваны. " Мне не мешали никакие средства расстановки приоритетов или группировки потоков, но последний бит «нельзя уничтожить, остановить, приостановить, возобновить или прервать» - это проблема.
У меня есть приложение, которое запускает один поток для отправки данных датчика в очередь, а другой - для извлечения данных датчика из этой очереди, а затем отправляет их в окно curses. Проблема в том, что есть случаи, когда пары потоков (в данном случае они всегда пары) перезаписываются новыми потоками из-за изменений конфигурации и т. Д. c. До сих пор я удалял объекты потоков в предположении fooli sh, что это действие приведет к уничтожению указанных потоков. Я заметил странное поведение в приложении, которое теперь имеет смысл, поскольку несколько потоков пытаются отправить данные в один и тот же объект окна проклятий.
Изменив свой подход, я создам несколько пар потоков, рассматривая их как неразрушим, обновлять их конфигурации по мере необходимости ... но как я могу контролировать их выполнение из основного потока? Есть ли лучшая практика? Я думаю, создать несколько пар шаблонных потоков, запустить их и использовать класс threading.Condition () или threading.Event () для запуска / остановки кода внутри каждого выполняющегося потока, но как мне передать информацию о том, что делать каждому запущенному потоку? Поскольку я этого не делал, я учусь в основном по проверенной временем традиции rtfm; но примеры и небольшое руководство помогут. Я использую threading.Event.is_set ()? Если это так, как мне установить / очистить внутренний флаг снаружи потока? Являются ли объекты threading.Event () глобальными и, следовательно, видимыми для потоков, или мне нужно сделать объект Event () одним из аргументов функции, выполняемой потоком, а затем позволить функции потока оценить Event () и установить / очистить его в главном потоке?