TLDR:我正在为应用程序开发人员寻找关于 asyncio 的全面或权威的解释(教程/书籍/演示文稿/...)。
虽然我对事件循环和futures/deferreds/promise 有很好的理解(很大程度上要感谢JavaScript),但Python 的asyncio 的复杂性仍然让我感到困惑。asyncio 似乎比我习惯的要复杂得多——大概是因为它部分设计用于与现有实现(Twisted、Tornado 等)的低级别兼容性,并且因为它允许在单独的线程中进行多个事件循环。
据我所知,基本概念没有全面的演练,所以我查阅了官方文档以及网络上的各种文章和演示文稿。
然而我仍然不确定我的理解,很可能是因为在应用程序级别并不总是清楚什么是相关的,或者您是否不需要担心上述替代方案。(许多资源似乎假设熟悉 Twisted 等人。)
一些给我带来不确定性的例子:
- 到目前为止,我只
asyncio.coroutine
与 结合使用yield from
,但这种比较表明我应该重新考虑。 - 可以使用
loop.create_server(MyProtocol)
或创建服务器asyncio.start_server(my_connection_handler)
- 我什么时候使用? - 管理循环生命周期(例如
loop.close()
之后loop.run_forever()
)的适当卫生是什么? - 我还没有理解为什么
Task
除了 s 之外还需要Future
s。 - 如果我希望类构造函数是非阻塞的(即 use
yield from
,这似乎是无效的)怎么办? - 类 getter 可以是异步的(即组合
@property
andasyncio.coroutine
)吗? - 我如何知道任何给定的函数是否是异步的?例如,我希望
StreamWriter.write
是非阻塞的,但我不知道事实是否如此。
我不是在要求这些特定问题的答案,它们只是说明我在概念层面上是如何挣扎的。