asyncio.Future对象 Future是Task类的基类 Task对象内部await结果的处理是基于Future对象来的
async def main():
# 获取当前事件循环
loop = asyncio.get_running_loop()
# 创建一个任务(Future对象)
fut = loop.create_future()
# 等待任务的最终结果(Future对象),没有结果会一直等待下期
await fut
asyncio.run(main())
async def set_after(fut):
await asyncio.sleep(2)
# 给fut赋值666
fut.set_result("666")
async def main():
# 获取当前事件循环
loop = asyncio.get_running_loop()
# 创建一个任务(Future对象),没有榜单任何行为。则这个任务永远不知道什么时候结束
fut = loop.create_future()
# 创建一个任务(task)对象,榜单了set_after函数,函数内部在2s后会给fut赋值
# 手动设置future任务的最终结果,那么fut就可以结束了
await loop.create_task(set_after(fut))
# 等待Future对象获取最终结果,否则一直等待下去
data = await fut
print(data)
asyncio.run(main())
concurrent.futures.Future对象
使用线程池、进程池实现异步时用到的对象
import time
from concurrent.futures import Future
from concurrent.futures.thread import ThreadPoolExecutor # 线程池
from concurrent.futures.process import ProcessPoolExecutor # 进程池
def func(v):
time.sleep(1)
print(v)
# 创建线程池
pool = ThreadPoolExecutor(max_workers=3)
for i in range(10):
# 线程池提交之后,会返回一个Future对象
fut = pool.submit(func, i)
print(fut)
如果使用异步编程的时候遇到第三方模块不支持的时候,可以使用
标签:fut,对象,await,Future,loop,asyncio
From: https://www.cnblogs.com/Mickey-7/p/16611235.html