@AlexMine
Учусь

Где хранить информацию полученную в результате работы нескольких корутин?

Пишу ассинхронный парсер, моя логика такая, собираю ссылки на продукты их где то 800 штук, дальше у меня в функции есть такой код:

product_links = await get_category_products_links(page_links)
print(product_links)

parser_tasks = []

for product_link in product_links:
     parser_task = asyncio.create_task(set_product_info(task_id, category['id'], product_link))
     parser_tasks.append(parser_task)
        
await asyncio.gather(*parser_tasks)


корутина set_products_info():
В ней только одна строка product_info = await get_product_info(product_link), подскажите удобный способ поместить куда либо информацию о продукте, чтобы потом взять всю информацию о продуктах и записать их в файл?
Тоесть мне нужно из каждого вызова положить все product_info в одно место.
Базу данных не могу использовать по заданию, думал в глобальную переменную, но какой она должна быть, не знаю (список, очередь)?
Пытался писать в файл с помощью библиотеки aiofile, но у меня ломается текст.
  • Вопрос задан
  • 174 просмотра
Решения вопроса 1
idegree
@idegree
Senior Workaround Developer
Воспользуйтесь очередью - https://docs.python.org/3/library/asyncio-queue.html
Создайте её, прокиньте в таски, и сделайте корутину, которая будет вычитывать сообщения из очереди и складывать куда вам угодно, например, писать в файл.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы