Я столкнулся с проблемой дизайна в моем проекте.
ПРОБЛЕМА
Мне нужно запросить solr со всеми возможными комбинациями (более или менее 20 миллионов) некоторых параметров, извлеченных из наших списков, чтобы проверить, дают ли они хотя бы 1 результат. в противном случае эта комбинация вставляется в черный список (используется для статистического анализа и создания карты сайта)
КАК Я ДЕЛАЮ СЕЙЧАС
вложенный в циклы для объединения параметров (извлеченных из списков Python) и передачи их в метод (тот же, который я использую в производственной среде для запроса БД на веб-сайте), который проверяет на 0-результаты. если это 0, есть метод вставки в черный список
Нет необходимости в потоке
КАК Я НРАВИТСЯ ЭТОМУ
Я хотел бы поместить все комбинации в очередь и позволить объекту потока их извлекать, запрашивать и вставлять для лучшей производительности
Какие проблемы я испытываю
медлительность : будучи однопоточным, теперь требуется много времени для завершения (когда и если он завершится)
сброс соединения по одноранговому узлу [104] : это ошибка, выдаваемая solr через некоторое время, когда его запрашивают (я увеличил размер пула, но ничего не меняется), это самая повторяющаяся (и раздражающая) ошибка , в данный момент.
Python Hanging : это я решил с помощью декоратора тайм-аута (что не является правильным решением, но, по крайней мере, это помогает мне пройти всю обработку и получить быстрый тестовый вывод на данный момент. I ' оставлю это всякий раз, когда смогу найти разумное решение)
максимальный размер очереди : объект очереди может содержать до 32 тыс. Элементов, поэтому он не будет соответствовать моим числам
ЧТО Я ИСПОЛЬЗУЮ
питон 2,7
MySQL
апач-Solr
загорелое (интерфейс Python для Solr)
linux box
Мне не нужна никакая отладка кода, так как я бы предпочел выбросить то, что я сделал для начала, вместо того, чтобы исправлять это снова и снова ... "Проба по ошибке" - это не то, что мне нравится.
Я бы хотел, чтобы каждое предложение, которое может прийти вам в голову, составило это правильно. Также приветствуются ссылки, веб-сайты, руководства, так как мой опыт работы с подобными сценариями строится по мере моей работы.
Заранее всем спасибо за помощь! Если вы что-то не поняли, просто спросите, я отвечу / обновлю сообщение, если необходимо!
РЕДАКТИРОВАТЬ НА ОСНОВЕ НЕКОТОРЫХ ОТВЕТОВ (сохранит это обновление)
я, вероятно, отброшу потоки Python для многопроцессорной библиотеки : это может решить мои проблемы с производительностью
метод построения "разделяй и властвуй" : это должно добавить некоторую логику в мою конструкцию параметров, без необходимости грубого подхода
что мне еще нужно знать : где я могу хранить свои комбинации для подачи рабочего потока? возможно, это больше не проблема, так как подход «разделяй и властвуй» может позволить мне генерировать во время выполнения комбинации и разбивать их между рабочими потоками.
NB: пока я не приму никакого ответа, так как я хотел бы поддерживать этот пост на некоторое время живым, просто чтобы собрать все больше и больше идей (не только для меня, но, возможно, для дальнейшего использования другими, поскольку это общая природа)
Еще раз всем спасибо!