chaining coroutines in asyncio (and observer pattern)(在异步(和观察者模式)中链接协程)
问题描述
我很难理解协程是如何链接在一起的。在一个比hello world或factorials稍微简单一点的示例中,我希望有一个循环,它持续监视文件修改时间,然后在每次接触文件时打印出时间:
我预计这会起作用-但是,当我运行它时,我得到一个:
我在这里做错了什么?
更新:有关观察者模式的示例(即,在不使用回调(您必须使用任务)的情况下有效地允许多个注册者获取更新),请参阅下面的答案。
UPDATE2:对此有更好的修复:3.5的async for
(异步迭代器):https://www.python.org/dev/peps/pep-0492/
推荐答案
我在链接的协程中使用return
而不是yield
使您的代码正常工作,就像chained coroutines example:
请注意,printer()
的循环将为每个迭代创建一个新的pathmonitor
生成器。不确定这是否是您想要的生成器,但这可能是一个开始。
我自己觉得协程API和语法有点混乱。以下是我觉得有帮助的一些读物:
- What’s New In Python 3.3: "PEP 380: Syntax for Delegating to a Subgenerator"
- PEP380: "Formal semantics"
- asyncio: "Example: Chain coroutines"
- Greg Ewing's "Binary Tree" example
这篇关于在异步(和观察者模式)中链接协程的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!