, но этот код не дает никакого улучшения скорости
asyncio (и асинхронность / параллелизм в целом) дает улучшение скорости для операций ввода-вывода, которые чередуются друг с другом.
Когда все, что вы делаете, это await something
и вы никогда не создаете никаких параллельных задач (используя asyncio.create_task()
, asyncio.ensure_future()
и т. Д.), Тогда вы в основном выполняете классическое синхронное программирование:)
Итак, какчтобы сделать запросы быстрее:
import aiohttp
import asyncio
import time
async def fetch(session, url):
async with session.get(url) as response:
return await response.text()
async def check_link(session):
html = await fetch(session, 'https://example.com')
print(time.time())
#do_something_with_html(html)
async def main():
async with aiohttp.ClientSession() as session:
while True:
asyncio.create_task(check_link(session))
await asyncio.sleep(0.05)
asyncio.run(main())
Обратите внимание: async with aiohttp.Cliensession() as session:
должно быть выше (снаружи) while True:
, чтобы это работало.На самом деле, в любом случае наличие единого ClientSession()
для всех ваших запросов является хорошей практикой.