У меня есть список файлов, которые я хочу проанализировать с BeautifulSoup. Бег
soup = BeautifulSoup(file, 'html.parser')
занимает около 2 секунд для каждого файла, так что
soups = []
for f in files:
soups.append(BeautifulSoup(f, 'html.parser'))
занимает около 40 секунд.
Я хотел бы запустить BeautifulSoup(file, 'html.parser')
для каждого файла вместе, чтобы весь процесс завершился примерно через 2 секунды. Возможно ли это?
Я пробовал следующее, которое не работало:
async def parse_coroutine(F):
return BeautifulSoup(F, 'html.parser')
async def parse(F):
p = await parse_coroutine(F)
return p
lst = [parse(f) for f in files]
async def main():
await asyncio.gather(*lst)
asyncio.run(main())
1) BeautifulSoup(F, 'html.parser')
выполняется до конца, и я не могу вызывать другие функции во время его выполнения
2) Приведенный выше код не дает мне того, что я хочу: я хочу, чтобы объекты, возвращенные BeautifulSoup(F, 'html.parser')
, были сохранены в списке
Согласно этой , асинхронная синхронизация на самом деле не реализует параллельную обработку так, как я хочу. Так какие у меня варианты? Я хотел бы получить конкретное решение, если это возможно, потому что я не знаком с многопоточностью / параллельным программированием и т. Д.