Возможно, я слишком заморачиваюсь и существуют какие-то методы, которые позволяют без применения нейронных сетей выполнить эту задачу универсально и с достаточно большой точностью.
много потоков это хорошо, но с ростом количества потоков производительность будет падать ну то есть 8 потоков будут работать не в два раза быстрее чем 4.
У вас по сути большая часть времени - это работа с сетью, что медленно. Выход - event loop. В рамках одного потока запускаем много много неблокируемых запроса, и по мере завершения запросов обрабатываем результат.
Комбинация нескольких потоков (по количеству ядер процессора) и event loop даст максимальную утилизацию процессора.