Всем привет. Есть скрипт работающий с сетью в несколько процессов (multiprocessing.Process). Каждый из процессов поднимает внутри себя несколько сотен потоков (threading.Thread). Пропорционально качеству сети, потоки время от времени кидают эксепшены о проблемах чтения из сокетов. Уменьшение количества потоков сводит к нулю такие ИС. При возникновении ИС потоки не умирают, а просто возвращают задачу в очередь и берут следующую в работу.
Вопрос вот в чём. Есть ли какой-то алгоритм или паттерн описывающий в подобных ситуациях регуляцию кол-ва потоков в зависимости от частоты возникновения ИС отдельного типа?
Хочу получить примерное следующее - если в течение времени T на Х запросов у нас возникает N ошибок, то каждому процессу даётся команда убить у себя по 10 потоков. Ожидаем T. И так пока за время T не будет ошибок вовсе.
Главная проблема в вышеописанной схеме - как именно без ущерба для работы убивать потоки? Они ведь в момент терминейта будут работать с какой-то конкретной задачей.
Пока что пришло в голову только создание у потоков св-ва типа need_die и постоянной его проверки. Если оно True, то поток завершает работу и помирает. А св-во это будет проставлять процесс, рандомным образом выбирая из пула N потоков.