玩转 Python 3.5 的 await/async(二)

2015-11-10 13:44:46 · 作者: · 浏览: 23
Iteration 异常。


为此我们新建一个函数,这个函数传入一个协程列表,函数执行这些协程直到全部结束。我们现在要做的就是调用这个函数。
def run(coros):
? ? coros = list(coros)


? ? while coros:
? ? ? ? # Duplicate list for iteration so we can remove from original list.
? ? ? ? for coro in list(coros):
? ? ? ? ? ? try:
? ? ? ? ? ? ? ? coro.send(None)
? ? ? ? ? ? except StopIteration:
? ? ? ? ? ? ? ? coros.remove(coro)


这段代码每次从协程列表里取一个协程执行,如果捕获到 StopIteration 异常,就把这个协程从队列里去掉。


接下来我们把手工调用 send 的代码去掉,代码如下:
c1 = coro1()
c2 = coro2()
run([c1, c2])


综上所述,在 Python 3.5,我们现在可以通过新的 await 和 async 功能很轻松的执行协程。本文的相关代码可以在 github 上找到。


下面关于Python的文章您也可能喜欢,不妨看看:


英文原文:Playing around with await/async in Python 3.5