【发布时间】:2018-02-18 21:55:08
【问题描述】:
从 asyncio 文档中它指出 asyncio 具有:
“模拟 concurrent.futures 模块中的 Future 类,但适用于事件循环;”
为什么需要在标准库中有两个不同的 Future 类(异步和并发)?为什么有必要为事件循环调整它?我在这里遗漏了什么,或者是什么让他们这样决定?
【问题讨论】:
标签: python future python-asyncio concurrent.futures
从 asyncio 文档中它指出 asyncio 具有:
“模拟 concurrent.futures 模块中的 Future 类,但适用于事件循环;”
为什么需要在标准库中有两个不同的 Future 类(异步和并发)?为什么有必要为事件循环调整它?我在这里遗漏了什么,或者是什么让他们这样决定?
【问题讨论】:
标签: python future python-asyncio concurrent.futures
为什么需要有两个不同的 Future 类 标准库(异步和并发)?
虽然这些类看起来很相似,但它们用于两种不同的并发编程范例,并具有不同的实现和接口。例如,
concurrent.futures.Future 用于基于线程/进程的并发编程,不应该对事件循环一无所知,因为在这种情况下没有事件循环。 result 方法只是阻塞线程/进程的执行流程,直到超时或未来完成。
asyncio.Future 用于基于协程的并发编程,应该了解事件循环、协程函数和其他相关内容。 result 方法不会阻塞执行流,因为在这种情况下执行流根本不应该被阻塞。相反,您应该等待未来,直到它完成允许返回并由事件循环管理执行流。
混合它们没有任何好处,而拆分类使它们的实现更容易,接口更清晰。