专栏名称: 编程派
Python程序员都在看的公众号,跟着编程派一起学习Python,看最新国外教程和资源!
目录
相关文章推荐
51好读  ›  专栏  ›  编程派

Flask 作者写万字长文谈 asyncio(下)

编程派  · 公众号  · Python  · 2017-02-28 11:46

正文

请到「今天看啥」查看全文


concurrent . futures . Future

其中一个出现在另一个之前,但它们都仍然在 asyncio 中使用。 例如, asyncio . run_coroutine_threadsafe () 将调度一个协程到在另一个线程中运行的事件循环,但它返回一个 concurrent . futures . Future 对象,而不是 asyncio . futures . Future 对象。 这是有道理的,因为只有 concurrent . futures . Future 对象是线程安全的。

所以现在我们知道有两个不兼容的 future,我们应该澄清哪个 future 在 asyncio 中。

老实说,我不完全确定差异在哪里,但我打算暂时称之为"最终"。它是一个最终将持有一个值的对象,当还在计算时你可以对最终结果做一些处理。 future 对象的一些变种称为 deferred,还有一些叫做 promise。 我实在难以理解它们真正的区别。

你能用一个 future 对象做什么?

你可以关联一个准备就绪时将被调用的回调函数,或者你可以关联一个 future 失败时将被触发的回调函数。

此外,你可以 await 它(它实现 __await__ ,因此可等待),此外,future 也可以取消。

那么你怎样才能得到这样的 future 对象? 通过在 awaitable 对象上调用 asyncio . ensure_future 。它会把一个旧版的生成器转变为 future 对象。 然而,如果你阅读文档,你会读到 asyncio . ensure_future 实际上返回一个 task (任务)。

那么问题来了,什么是任务?







请到「今天看啥」查看全文