Есть скрипт, который проверяет данные доменов (ip, NS, редиректы и т.д.) и записывает их в БД mysql. При запуске скорость работы одна, но при проверке 10 тыс. доменов скорость начинает снижаться, при достижении 100 тыс., скорость очень сильно падает. Ниже код main(), думаю, одна из причин там. Прошу указать на моменты, над которыми надо по работать.
async def main():
agent = {
'user_agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) '
'Chrome/81.0.4044.138 Safari/537.36'}
pool = await aiomysql.create_pool(host='localhost', user='user', password='user', db='db')
geo_ip = 'geo_ip/IP2LOCATION-LITE-DB1.CSV'
filename = 'urls.txt'
app_storage['session'] = ClientSession()
with open(geo_ip, mode='r', encoding='utf-8') as file:
csv_reader = csv.reader(file)
next(csv_reader)
data_ip = list(csv_reader)
async with ClientSession() as session:
await create_table(pool)
async with aiofiles.open(filename, 'r', encoding='utf-8') as file:
domains = [line.strip() for line in await file.readlines()]
current_date = datetime.datetime.now().strftime('%d-%m-%Y')
sem = asyncio.Semaphore(120)
tasks = []
for domain in domains:
tasks.append(get_domain_ip(sem, domain, pool, data_ip, current_date, agent))
for task in tqdm(asyncio.as_completed(tasks), total=len(tasks)):
await task
if __name__ == '__main__':
conn = http.client.HTTPConnection("ifconfig.me")
conn.request("GET", "/ip")
print(f'Work IP - {conn.getresponse().read().strip()}')
if sys.platform.startswith('win'):
asyncio.set_event_loop_policy(asyncio.WindowsSelectorEventLoopPolicy())
else:
asyncio.set_event_loop_policy(asyncio.DefaultEventLoopPolicy())
asyncio.run(main())