Как я могу оптимизировать код Python для создания и фильтрации очень большого списка активных URL-адресов с помощью многопроцессорной обработки? [код очень медленный] - PullRequest
1 голос
/ 06 февраля 2020

1) Цель моего кода - проверить около 400 тыс. URL-адресов, если они активны, и из этого создать CSV-файл со всеми активными URL-адресами. Ниже код с использованием многопроцессорной обработки работает нормально на меньшем подмножестве URL-адресов, но очень медленно на полном наборе URL-адресов.

2) Я ищу идеи о том, как оптимизировать и в основном ускорить код. Даже после того, как он зациклился на всех URL-адресах, он все еще занимает очень много времени, чтобы отфильтровать результаты и создать файл CSV. У меня было несколько раз, когда код зависал, и я также ищу способ убедиться, что уже проверенные ссылки не теряются.

3) Единственное, о чем я могу подумать на момент делит список URL-адресов и создает несколько CSV-файлов, которые я объединю позже. Это обеспечит уже промежуточные результаты, но я сомневаюсь, что это ускорит процесс.

import requests
from multiprocessing.dummy import Pool as ThreadPool
import pandas as pd 

urls = ["%.7d" % i for i in range(8700000,8300000,-1)]

def get_status(url):
    r = requests.get(r'https://www.somesite.be/'+url)
    print(url)
    return r.status_code, url


if __name__ == "__main__":
    pool = ThreadPool(10)  # Make the Pool of workers
    results = pool.map(get_status, urls) #Open the urls in their own threads
    ids = list(filter(lambda x: x[0] == 200, results))
    ids_1 = list(map(lambda x: x[1], ids))
    df = pd.DataFrame(ids_1)
    df.to_csv('ids.csv', index=False)
    pool.close()
    pool.join()
...