Какую стратегию использовать с многопроцессорной обработкой в ​​python

Я совершенно новичок в многопроцессорной обработке. Я читал документацию о многопроцессорном модуле. Я читал о пуле, потоках, очередях и т. Д., Но я полностью потерялся.

Что я хочу сделать с многопроцессорной обработкой, так это преобразовать мой скромный загрузчик http для работы с несколькими рабочими процессами. В настоящий момент я загружаю страницу, просматриваю страницу, чтобы получить интересные ссылки. Продолжайте, пока не загрузятся все интересные ссылки. Теперь я хочу реализовать это с помощью многопроцессорной обработки. Но на данный момент я не знаю, как организовать этот рабочий процесс.У меня было две мысли по этому поводу. Во-первых, я подумал о двух очередях. Одна очередь для ссылок, которые нужно скачать, другая - для ссылок, которые нужно проанализировать. Один рабочий загружает страницы и добавляет их в очередь для элементов, которые необходимо проанализировать. Другой процесс анализирует страницу и добавляет ссылки, которые он считает интересными, в другую очередь. Проблемы, которые я ожидаю от этого подхода: Прежде всего, зачем загружать по одной странице и анализировать страницу за раз. Более того, как один процесс узнает, что есть элементы, которые нужно добавить в очередь позже, после того, как он исчерпал все элементы из очереди.

Еще один подход, о котором я подумал, - это. Имейте функцию, которую можно вызвать с URL-адресом в качестве аргумента. Эта функция загружает документ и начинает анализировать его на наличие ссылок. Каждый раз, когда он встречает интересную ссылку, он мгновенно создает новый поток, выполняющий ту же функцию, что и он сам. Проблема, с которой я сталкиваюсь с этим подходом, заключается в том, как мне отслеживать все процессы, порожденные повсюду, и как узнать, есть ли еще процессы, которые должны выполняться. А также, как ограничить максимальное количество процессов.

Так что я полностью заблудился. Может ли кто-нибудь предложить хорошую стратегию и, возможно, показать несколько примеров кода о том, как реализовать эту идею.

5
задан Benjamin 11 July 2014 в 20:31
поделиться