async вызов функции с http request

Мне нужно обработать 80к доменов (считав для каждого данные webarchive) и я сделал скрипт на python, который это делает. Но он делает это последовательно и медленно.. Так я только начал изучать python, я никак не могу разобраться с многопоточностью... и прошу помощи у сообщества.

У меня есть участок кода, который создает пул задач (передавая в него i - это номер домена в DataFrame)

  loop = asyncio.get_event_loop()
tasks = [askarchive(i, 1) for i in tqdm(range(len(df)))]

loop.run_until_complete(
    asyncio.gather(*tasks)
)
loop.close()

И он вызывает функцию, которая должна в многопоточном режиме с применением прокси делать запросы к вебархиву.. И вот тут у меня возникли сложности - чего я только не перепробовал - ничего не выходит :(

async def askarchive(i, type):
global df
url = df.domain[i]
session = requests.session()
result = False
while not result:

    try:
        if type == 1:  # Кол-во главных за год
            print ('checking domain'+str(i))
            response = session.get ('http://web.archive.org/cdx/search/cdx?url=' + url + '&output=json&from='
                                   + str(datefrom) + '&to=' + str(dateto) + '&filter=statuscode:200', proxies = next_proxy(),
                                   timeout=1)
            print(response.text)
        if type == 2: # Кол-во уник страниц в вебархиве
            response = session.get('http://web.archive.org/cdx/search/cdx?url=' + url +
                                   '&matchType=domain&limit=200&output=json&from=' + str(datefrom) + '&to='
                                   + str(dateto) + '&filter=statuscode:200&filter=mimetype:text/html',
                                   proxies = next_proxy(), timeout=1)
            #print(response.text)

        if any(word in response.text for word in errors):
            result = False
        elif '404 Not Found' in response.text:
            print ('Домен главных 0' + df.domain[i])
            df.at[i, 'armains'] = 0
            df.at[i, 'wapages'] = 0
        else:
            if type == 1:
                df.at[i, 'armains'] = int(response)
                print ('Домен трафик ' + df.domain[i] + str(df.armains[i]))
            if type == 2:
                df.at[i, 'wapages'] = int(response)
                print ('Домен страниц ' + df.domain[i] + str(df.wapages[i]))

    except requests.exceptions.ConnectionError:
        # print ("Удаляем прокси" + str(proxylist.pop(proxynum))+ "осталось прокси в списке: "+str(len(proxylist)))
        result = False
    except requests.exceptions.ReadTimeout:
        # print ("Удаляем прокси" + str(proxylist.pop(proxynum))+ "осталось прокси в списке: "+str(len(proxylist)))
        result = False

Ответы (0 шт):