Задать вопрос
freakssha
@freakssha

Как реализовать асинхронную функцию с asyncio в моем случае?

Цель - создать документ не после закрытия программы, как это происходит сейчас, а во время ее работы.

Функция "first" просто должна вызывать асинхронную "second", которая создаст docx.

def first(self, event):
    loop = asyncio.get_event_loop()
    loop.run(self.second())

async def second(self):
    document = Document()
    document.save('test.docx')

Уверен, проблема в функции «first», в том, как она вызывает «second».

Я работаю над старым проектом, исправлять который нет времени; внутри много ошибок в базовых вещах, поэтому браузер не помог - нужно что-то конкретно под ситуацию. Даже не смотря на это, подскажите, пожалуйста, как решить проблему.
Спасибо.
  • Вопрос задан
  • 168 просмотров
Подписаться 2 Простой 6 комментариев
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Академия Эдюсон
    Python-разработчик
    9 месяцев
    Далее
  • ProductStar × РБК
    Профессия: Python-разработчик + ИИ
    8 месяцев
    Далее
Решения вопроса 1
marazm76
@marazm76
Почему конкретно не получается? Есть ошибки?
Вынесете запуск цикла из функции. Вот рабочий пример.
import asyncio


class Document:
    async def save(self, name):
        await asyncio.sleep(1)
        print(f'Document "{name}" has saved')


async def first():
    name = "test_document.doc"
    print("Run first function")
    await second(name)


async def second(name):
    await Document().save(name)


asyncio.run(first())


Из функции first можно асинхронно сохранять как один документ, так и несколько (через await asyncio.gather).
async def first():
    print("Run first function")
    await asyncio.gather(
        second('doc_1'),
        second('doc_2'),
        second('doc_3'),
    )


Из кода не понятна реализация класса Document, но я бы посоветовал сохранение тоже делать не блокирующим. Например можно использовать aiofile для асинхронного сохранения документов на диск.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽