Python - использование многопроцессорной обработки / многопоточности для утилизации в Интернете

Я использую пакет Python из Википедии для очистки данных определенной темы.

q=['NASA', 'NASA_insignia', 'NASA_spinoff_technologies', 'NASA_facilities', 'NASA_Pathfinder', 'List_of_NASA_missions', 'Langley_Research_Center', 'NASA-TLX', 'Budget_of_NASA', 'NASA_(disambiguation)']

Пример выше, я искал НАСА. Теперь мне нужно получить сводку по каждому элементу в списке.

ny = []
for i in range(len(q)):
    y = wikipedia.page(q[i])
    x = y.summary
    ny.append(x)

При выполнении всего этого процесса, то есть прохождения каждого элемента списка и извлечения сводки по каждому элементу, для завершения всего процесса требуется почти 40-60 секунд (даже при хорошем сетевом соединении)

Я не знаю много о многопроцессорности / многопоточности. Как я могу ускорить выполнение на значительное время? Любая помощь будет оценена.

1 ответ

Решение

Вы можете использовать пул обработки (см. Документацию).

Вот пример, основанный на вашем коде:

from multiprocessing import Pool


q = ['NASA', 'NASA_insignia', 'NASA_spinoff_technologies', 'NASA_facilities', 'NASA_Pathfinder',
     'List_of_NASA_missions', 'Langley_Research_Center', 'NASA-TLX', 'Budget_of_NASA', 'NASA_(disambiguation)']

def f(q_i):
    y = wikipedia.page(q_i)
    return y.summary

with Pool(5) as p:
    ny = p.map(f, q)

В принципе f применяется для каждого элемента в q в отдельных процессах. Вы можете определить количество процессов при определении пула (5 в моем примере).

Другие вопросы по тегам