Вы можете использовать конвейерную архитектуру: crawl -> process -> save to db -> email;Потоково-безопасные очереди должны использоваться для соединения разных фаз;каждая фаза может быть индивидуально настроена на использование N потоков.Затем в производственной среде измерьте и настройте количество потоков, которое может использовать каждая фаза, так чтобы ни одна фаза не ожидала, пока другие фазы предоставят / потребят данные в течение большей части времени.
Помните, что существует много другихфакторы для корректировки на лучший результат.Пример: предположим, что ваша база данных может обрабатывать не более одного сохранения в секунду, но конвейер перед базой данных может легко создать десять страниц в секунду, в этом случае многие хотят ограничить размер очереди между базой данных и процессом до некоторого небольшого числа.
Настроить все эти факторы и посмотреть, как они взаимодействуют друг с другом, интересно и весело.Вы будете удивлены, увидев, как машина может работать по сравнению с подходом «просто иди многопоточность / обработка».