【发布时间】:2018-04-26 14:07:35
【问题描述】:
在学习 asyncio 时,我正在尝试以下代码:
import asyncio
from asyncio.coroutines import coroutine
@coroutine
def coro():
counter: int = 0
while True:
print("Executed" + str(counter))
counter += 1
yield
loop = asyncio.get_event_loop()
loop.run_until_complete(coro())
loop.run_forever()
print("Finished!")
我希望协程只执行一次,因为它包含一个 yield 并且应该将控制权返回给调用者。我期待的输出是:
Executed 0
Finished!
我期待这种行为,因为我认为循环将在每次执行后返回给调用者的每个“帧”永远运行协程(类似于后台线程,但以协作方式)。但是相反,它永远运行协程而不返回?输出如下:
Executed 0
Executed 1
Executed 2
Executed 3
...
谁能解释为什么会发生这种情况而不是我的期望?
干杯。
【问题讨论】:
-
我希望协程只执行一次,因为它包含一个 yield
yield在哪里? -
抱歉,我以某种方式在粘贴的代码中遗漏了产量。我又加了一次。感谢您发现它!
标签: python-asyncio coroutine event-loop