Как использовать multiprocessing.pool для загрузки ссылок, а затем обновления их статуса? - PullRequest
0 голосов
/ 03 августа 2020

У меня есть

  • входной фрейм данных id, содержащий 1000 строк и 2 столбца, т.е. LINK и DONE. Столбец LINK содержит ссылки для скачивания. Столбец DONE имеет значение 1, если ссылка успешно загружена, и 0 в противном случае
  • функция crawl, которая принимает ссылку в качестве входных данных и затем возвращает a, b, и c, так что a - это строка, а b и c - это фреймы данных.

Я хотел бы загрузить 100 ссылок с DONE равными 0 каждая раз я запускаю код. Для тех ссылок, которые были успешно загружены, я хочу, чтобы связанный с ним DONE был обновлен с помощью 1 и

  • , объединяющий все строки a s

  • объединить все фреймы данных b s

  • объединить все фреймы данных c s

Для этого цель, я кодирую

for i in id[id['DONE'] == 0].index:
    headers = {'User-Agent': 'Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:78.0) Gecko/20100101 Firefox/78.0'}
    r = session.get(id.at[i, 'LINK'], headers = headers)
    if r.status_code == 200:
        id.at[i, 'DONE'] = 1
        a = crawl(id.at[i, 'LINK'])[0] + a     
        b = b.append(crawl(id.at[i, 'LINK'])[1])
        c = c.append(crawl(id.at[i, 'LINK'])[2])

Это очень медленно, поскольку обрабатывает одну ссылку за раз. Я обнаружил, что мы можем использовать multiprocessing.pool для параллелизма. К сожалению, мой код рекурсивен и поэтому не является независимым между итерациями.

Не могли бы вы помочь мне использовать multiprocessing.pool для достижения моей цели?

...