Я хочу очистить данные с веб-сайта одновременно, но обнаружил, что следующая программа НЕ выполняется одновременно.
async def return_soup(url):
r = requests.get(url)
r.encoding = "utf-8"
soup = BeautifulSoup(r.text, "html.parser")
future = asyncio.Future()
future.set_result(soup)
return future
async def parseURL_async(url):
print("Started to download {0}".format(url))
soup = await return_soup(url)
print("Finished downloading {0}".format(url))
return soup
loop = asyncio.new_event_loop()
asyncio.set_event_loop(loop)
t = [parseURL_async(url_1), parseURL_async(url_2)]
loop.run_until_complete(asyncio.gather(*t))
Однако эта программа начинает загружать второй контент только после его завершения. Если мое понимание верно, ключевое слово await
в await return_soup(url)
ожидает завершения функции и, ожидая завершения, возвращает элемент управления в цикл обработки событий, что позволяет циклу начать вторую загрузку ,
И как только функция окончательно завершает выполнение, будущий экземпляр в ней получает значение результата.
Но почему это не работает одновременно? Что мне здесь не хватает?