Создание нескольких асин c запросов - PullRequest
0 голосов
/ 15 января 2020

Я только начинаю изучать эту новую библиотеку под названием Requests- Html, которую я только что изучил в учебном пособии Кори Шафера , и задача состоит в создать asyn c вызов n различных запросов .

Так, например, у нас есть следующий код, который выполняется примерно за 3,6 секунды:

async def get_delay1():
    r = await asession.get("https://httpbin.org/delay/1")
    return r

async def get_delay2():
    r = await asession.get("https://httpbin.org/delay/2")
    return r

async def get_delay3():
    r = await asession.get("https://httpbin.org/delay/3")
    return r

asession = AsyncHTMLSession()

t1 = time.perf_counter()

results = asession.run(get_delay1, get_delay2, get_delay3)

for result in results:
    response = result.html.url
    print(response)

t2 = time.perf_counter()

print(t2 - t1)

Вопрос в том, что мне делать, если я хочу создать 500 asyn c запрос с этой библиотекой? Не может быть так, что мне придется кодировать 500 различных функций, верно?

Я пытался создать список с генераторами функций, чтобы я мог автоматически передавать n различные функции внутри него:

tasks = [get_delay1, get_delay2, get_delay3]
results = asession.run(tasks)

Но я получаю

ERROR`: 
asyncio.ensure_future(coro()) for coro in coros
TypeError: 'list' object is not callable

1 Ответ

1 голос
/ 15 января 2020

Я узнал, как это сделать.

После того, как мы создадим наш список, мы должны позвонить

asession.run(*tasks)

Таким образом, мы гарантируем, что передаем только вызываемые объекты метод run, т. е. элементы списка, а не сам список.

By!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...