- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
Guido van Rossum,在 2014 年关于 Tulip/Asyncio 的演讲中 shows the slide :
Tasks vs coroutines
Compare:
- res = yield from some_coroutine(...)
- res = yield from Task(some_coroutine(...))
Task can make progress without waiting for it
- As log as you wait for something else
- i.e. yield from
我完全没有捕获重点。
在我看来,这两种结构是相同的:
在裸协程的情况下 - 它被调度,因此无论如何都会创建任务,因为调度程序与任务一起操作,然后协程调用者协程被挂起,直到被调用者完成,然后可以自由继续执行。
在 Task
的情况下 - 都一样 - 新任务被调度并且调用者协程等待其完成。
两种情况下代码的执行方式有何不同?开发人员在实践中应该考虑哪些影响?
附言
非常感谢权威来源(GvR、PEP、文档、核心开发人员说明)的链接。
最佳答案
对于调用方协程 yield from coroutine()
感觉就像一个函数调用(即当 coroutine() 完成时它将再次获得控制权)。
yield from Task(coroutine())
感觉更像是创建一个新线程。 Task()
几乎立即返回,并且调用者很可能在 coroutine()
完成之前重新获得控制权。
f()
和th的区别 = threading.Thread(target=f, args=()); th.start(); th.join()
很明显了吧?
关于python - 协程 yield 与任务 yield ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27076577/
在我的设置中,我试图有一个界面 Table继承自 Map (因为它主要用作 map 的包装器)。两个类继承自 Table - 本地和全局。全局的将有一个可变的映射,而本地的将有一个只有本地条目的映射。
Rust Nomicon 有 an entire section on variance除了关于 Box 的这一小节,我或多或少地理解了这一点和 Vec在 T 上(共同)变体. Box and Vec
我是一名优秀的程序员,十分优秀!