Python中的asyncio模块中的Future和Task的区别?
问题一
按照官方文档的描述,Task是Futrue的一个subclass,标准库中也分别提供了create_task和create_future。请问这两者有功能上的什么区别?
问题二
对于ensure_future不是很理解,官方文档对于它的描述是:
asyncio.ensure_future(coro_or_future, *, loop=None)
Schedule the execution of a coroutine object: wrap it in a future. Return a Task object.If the argument is a Future, it is returned directly.
这段描述中wrap it in a future和Return a Task应该怎么理解,以下面这段代码为例子,factorial(name, number)显然是一个coroutine object,为什么wrap它到一个future对象后又返回一个Task,拜托大神解释下?
import asyncio
@asyncio.coroutine
def factorial(name, number):
f = 1
for i in range(2, number+1):
print("Task %s: Compute factorial(%s)..." % (name, i))
yield from asyncio.sleep(1)
f *= i
print("Task %s: factorial(%s) = %s" % (name, number, f))
loop = asyncio.get_event_loop()
tasks = [
asyncio.ensure_future(factorial("A", 2)),
asyncio.ensure_future(factorial("B", 3)),
asyncio.ensure_future(factorial("C", 4))]
loop.run_until_complete(asyncio.gather(*tasks))
loop.close()
ps: 上面这段代码,如果tasks设置为下面这样,执行效果也是一样的,为什么官方文档的这个例子非要添加一个ensure_futrue,这有什么用途吗?
tasks = [
factorial("A", 2),
factorial("B", 3),
factorial("C", 4)]
相关阅读:
Maven 如何像 Gradle 一样添加本地依赖库
直播推流demo里 相机预览界面显示不全,左右有白边
如何在用户访问页面的时候生成唯一值
Flask中的用户确认问题
angular 登陆验证
浏览器兼容性
关于 shouldComponentUpdate 控制渲染问题
ionic platform add android一直卡住不动
我一直在想,需要用户登录的高并发场景是如何模拟的?
golang如何终止一个有阻塞io读操作的goroutine?
这个 MySQL procedure 为何会报错
react组件内部使用Immutable 的意义是什么?
vuejs如何组件传递消息到另一个同级组件
webpack怎样给每个loader都写参数?
mysql 使用 join 还是 "," 进行多表查询???
WebApp怎么制作电子书功能?
移动端适配问题
angular2 怎么利用@directive 实现angular1中的ng-controller+ng-app
vue使用vue-infinite-scroll如何跟ajax配合,让page+1
php api调用问题