У меня есть
- входной фрейм данных
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
для достижения моей цели?