Python事件循环无法与标准输入一起正常工作

我正在尝试理解python的asyncio。我写这段代码只是为了演示清楚概念。

import asyncio
import threading


async def printer(b, a):
    print(b)
    await asyncio.sleep(5)
    print(a)


def loop_runner(loop):
    print('[RUNNING LOOP]')
    loop.run_forever()


if __name__ == '__main__':
    event_loop = asyncio.get_event_loop()
    # run_forever() is blocking. running it from separate thread
    loop_thread = threading.Thread(target=loop_runner, args=(event_loop,))
    loop_thread.start()

    while True:
        before, after = input('Before :'), input('After :')
        event_loop.create_task(printer(before, after))

我从单独的线程运行事件循环,并试图在运行时在循环中创建任务。但是我不明白为什么这段代码不能工作。它接受输入,然后进入下一次迭代,而不打印printer函数中的任何内容。

令人惊讶的是,如果我不从stdin获取输入,而只是使用如下所示的硬编码消息

   messages = [('Hello', 'world'), ('Foo', 'bar'), ('Alice', 'Bob')]

    for message in messages:
        before, after = message
        coroutine = printer(f'[ITERATION] {count} [MESSAGE] {before}', f'[ITERATION] {count} [MESSAGE] {after}')
        event_loop.create_task(coroutine)
        count += 1

一切都很好。输出

[RUNNING LOOP]
[ITERATION] 0 [MESSAGE] Hello
[ITERATION] 1 [MESSAGE] Foo
[ITERATION] 2 [MESSAGE] Alice
[ITERATION] 0 [MESSAGE] world
[ITERATION] 1 [MESSAGE] bar
[ITERATION] 2 [MESSAGE] Bob

请帮助我理解input的这种行为

转载请注明出处:http://www.jndeho.com/article/20230526/1904342.html