@kkolorid

Как реализовать асинхронную обработку массива http запросов (asyncio / aiohttp)?

Здравствуйте. Необходимо пройтись по массиву, выполняющему определенные действия в том числе, http запрос и обработку его ответа. Запрос занимает достаточно много времени - ресурсы простаивают. Посоветовали asyncio / aiohttp, но не могу ни как разобраться, что там и к чему.

Вот условный код на данный момент:

def checkUrl(url):
    headers = {
          'host': "host.com",
          'key': "23rn23rnn2rn23nr23nnr32rn23nrnn2"
    }

    response = requests.request("GET", "https://host.com/api/v2", headers=headers, params={"url": url}).json()
            
    return response["result"]

json = []

for mess in Array["response"]["items"]:
    json.append("str", "str", checkUrl(mess["url"]))


Нашел такой пример, но ни как не могу понять, что там происходит. Возможно ли сделать запрос, подставив заголовки? (через библиотеку requests)

import aiohttp
import asyncio

async def fetch(session, url):
    async with session.get(url) as response:
        return await response.text()

async def main():
    urls = [
            'http://python.org',
            'https://google.com',
            'http://yifei.me'
        ]
    tasks = []
    async with aiohttp.ClientSession() as session:
        for url in urls:
            tasks.append(fetch(session, url))
        htmls = await asyncio.gather(*tasks)
        for html in htmls:
            print(html[:100])

if __name__ == '__main__':
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())


Так же при попытках вывести что-то, кроме await response.text(), ругается. Прокомментируйте код хотя бы, если не сложно...
  • Вопрос задан
  • 556 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы