1) Создание сопрограммы для асинхронного выполнения запроса:
import asyncio
import aiohttp
async def get_text(url):
async with aiohttp.ClientSession() as session:
async with session.get(url) as resp:
return await resp.text()
2) Замените все синхронные запросы на ожидание этой сопрограммы, сделав также сопрограммы внешних функций:
async def field_info(field_link): # async - to make outer function coroutine
text = await get_text(field_link) # await - to get result from async funcion
soup = BeautifulSoup(text, 'html.parser')
3) Создание внешнего кода для одновременного выполнения заданий с использованием asyncio.gather()
:
async def main():
links = [link1, link2, link3]
scraped_info = asyncio.gather(*[
field_info(link)
for link
in links
]) # do multiple field_info coroutines concurrently (parallely)
4) Передать сопрограмму верхнего уровня в asyncio.run()
:
asyncio.run(main())