4.Future对象

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)
如果使用异步编程的时候遇到第三方模块不支持的时候,可以使用
 
 

作者:木子七

出处:https://www.cnblogs.com/Mickey-7/p/16611235.html

posted @   木子七  阅读(33)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
点击右上角即可分享
微信分享提示
workspaces
keyboard_arrow_up dark_mode palette
选择主题