asyncio.gather 当调用函数请求来自 STDIN 的输入时不执行任务?

asyncio.gather not executing tasks when caller function requests input from STDIN?

在以下人为设计的示例中,我试图从 STDIN 获取输入并根据来自 STDIN 的输入使用 asyncio.gather 同时执行协程任务列表。:

import asyncio

async def task_1():
    print('task_1!')

async def task_2():
    print('task_2!')

async def task_3():
    print('task_3!')

async def task_4():
    print('task_4!')

async def main():
    opts = {
        '1': [task_1, task_2],
        '2': [task_3, task_4]
    }
    while True:
        opt = input('Enter option: ')
        tasks = opts.get(opt)
        asyncio.gather(t() for t in tasks)

if __name__ == '__main__':
    asyncio.run(main())

然而,当执行上述代码时,当输入相应的选项时,输出不包含所需的输出。

来自 STDIN 的输入“1”应打印到 STDOUT:

task_1!
task_2!

来自 STDIN 的输入“2”应打印到 STDOUT:

task_2!
task_3!

输入“1”或 'two' 时没有输出。为什么 tasks 没有被 asyncio.gather 执行?

您需要等待 asyncio,并且需要向其传递多个参数,而不是列表。

await asyncio.gather(*(t() for t in tasks))