我最近一直在玩弄 asyncio,虽然我开始对它的工作原理有了直觉,但有些事情我做不到。我不确定这是否是因为我的构造错误,或者是否有原因使我尝试做的事情没有意义。
简而言之,我希望能够迭代产生的 asyncio.coroutine。例如,我希望能够执行以下操作:
@asyncio.coroutine
def countdown(n):
while n > 0:
yield from asyncio.sleep(1)
n = n - 1
yield n
@asyncio.coroutine
def do_work():
for n in countdown(5):
print(n)
loop.run_until_complete(do_work())
但是,这会从 asyncio 的内部引发异常。我已经尝试过其他的东西,比如for n in (yield from countdown(5)): ...
但这也给出了类似的不透明运行时异常。
我不能立即明白为什么你不应该做这样的事情,但我已经达到了我理解正在发生的事情的能力的极限。
所以:
- 如果可以做到这一点,我该怎么做?
- 如果不可能,为什么不呢?
如果这个问题不清楚,请告诉我!