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()