【发布时间】:2015-01-02 12:57:56
【问题描述】:
TLDR:我正在为应用程序开发人员寻找关于 asyncio 的全面或权威的解释(教程/书籍/演示文稿/...)。
虽然我对事件循环和futures/deferreds/promise 有很好的理解(很大程度上要感谢JavaScript),但不知何故,Python 的asyncio 的复杂性继续让我感到困惑。 asyncio 似乎比我习惯的要复杂得多——大概是因为它的部分设计是为了与现有实现(Twisted、Tornado 等)的低级兼容性,并且因为它允许在单独的线程中进行多个事件循环。
据我所知,没有全面的基本概念演练,所以我在网上查阅了official docs 以及各种articles 和presentations。
但我仍然不确定我的理解,很可能是因为在应用程序级别并不总是清楚什么是相关的,或者您是否不需要担心上述替代方案。 (许多资源似乎假定您熟悉 Twisted 等人。)
给我带来不确定性的几个例子:
- 到目前为止,我只将
asyncio.coroutine与yield from结合使用,但this comparison 建议我应该重新考虑。 - 可以使用
loop.create_server(MyProtocol)或asyncio.start_server(my_connection_handler)创建服务器 - 我什么时候可以使用? - 管理循环生命周期的正确卫生是什么(例如
loop.close()在loop.run_forever()之后)? - 我还不明白为什么除了
Futures 之外还需要Tasks。 - 如果我希望类构造函数是非阻塞的(即使用
yield from,这似乎是无效的)怎么办? - 类 getter 可以异步(即结合
@property和asyncio.coroutine)吗? - 我如何知道任何给定的函数是否是异步的?例如,我希望
StreamWriter.write是非阻塞的,但我不知道实际情况是否如此。
我并不是要这些特定问题的答案,它们只是说明我在概念层面上的挣扎。
【问题讨论】:
-
如果您要书籍或教程,我无能为力。但我可以回答关于 asyncio 的任何特定问题。
-
谢谢。现在,我不确定将上述问题转化为个人问题是否有意义,因为这无助于我在概念层面的理解。也许我想多了,所以会考虑一下。
标签: python python-asyncio