0
0 комментариев

Привет!
Я тут немного застрял с наверняка простой вещью. Коротко о проблеме:
— Подключён asyncio
— Созданы 2 async корутины user_io и task_manager
— В user_io() есть input, который напрочь игнорируется await
— task_manager() выполняется только после завершения user_io()
Внимание вопрос — Как сделать ожидание ввода и другие корутины «параллельными»?
Спасибо за помощь!

# Ждёт пользовательский ввод
async def user_io():
    try:
        # Ждём действия от пользователя
        while True:
            # Await, который ниже не работает!
            command = await input('Введите команду (С to EXIT): ')
            if re.match(r'[cC]', command):
                break
    except KeyboardInterrupt:
        print('Скрипт остановлен по комбинации клавиш')
 
# Корутина, выполняемая параллельно с ожиданием пользовательского ввода
async def task_manager():
    await asyncio.sleep(1)
    print("I'm a task manager 1!")
    await asyncio.sleep(1)
    print("I'm a task manager 2!")
 
 
if __name__=="__main__":
    # Запускаем цикл событий
    loop = asyncio.get_event_loop()
    tasks = [
        loop.create_task(user_io()),
        loop.create_task(task_manager())
    ]
    loop.run_until_complete(asyncio.wait(tasks))
    loop.close()
    sys.exit()


Добавить комментарий