хочу разогнать мой скрипт на более быструю скорость + найти ответы на некоторые вопросы. Также я буду очень рад ссылкам на какие-то источники которые могут мне помочь.
У меня есть проект написанный на Python который осуществляет запросы на разные домены. Доменов было около 10к.
Думаю будет правильно рассказать подробнее о моем проекте прежде чем, как углублюсь в вопросы. Мой проект достаточно прост, он состоит из 3 частей:
- Запрос на сайт и получения в ответе код страницы
- Далее я достаю нужные мне данные с кода
- В завершение я помещаю данные в бд
Теперь пройдусь по каждому пункту поподробнее:
- Первая часть кода - Все URLs лежат в txt > я читаю файл, и создаю список асинхронных тасков которые я в итоге вызываю в gather > в каждом таске выполняется один запрос. Для более простого понимания прикреплю часть кода:
# Создания гейзера
async def create_gather(urls):
tasks = []
for url in urls:
tasks.append(asyncio.create_task(main(url.strip())))
await asyncio.gather(*tasks)
# Запрос
async def main(url):
page = None
try:
async with aiohttp.ClientSession(timeout=timeout) as session:
headers = {
'User-Agent': UserAgent().chrome
}
response = await session.post(url, headers=headers)
if response.status in [301, 302, 403, 404, 500, 504]:
print(f'-----------------------{response.status}----------------------- {url}')
else:
page = await response.text()
except UnicodeDecodeError:
print(f"------ {url} -------- UnicodeDecodeError")
except TimeoutError:
print(f"------ {url} -------- TimeoutError")
except Exception as ex:
print(f'------ {url} --------\n{ex}')
finally:
return [page, url]
- Вторая часть кода у меня синхронная, с помощью библиотеки bs4 я извлекаю мне нужные данные
- Третья часть кода - использую Postgrersql, библиотеки psycopg2
В чем конкретно проблема, количество доменов выросло до 1м
Основной вопрос как я могу ускорить мой скрипт, я понимаю что я могу переписать на более низкоуровневый язык весь скрипт, но мне очень интересно как я могу на пайтоне добиться максимальной скорости, мне очень интересно как это делают гуру пайтона)
Вопросы которые меня также волнуют:
- Если ли лучше библиотека чем aiohttp?
- Какие бы вы использовали библиотеки место bs4 и psycopg2 для большей производительности?
- И важный вопрос, как лучше всего считать кол-во страниц сайта?