Loading

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

posted @ 2022-08-21 22:26  木子七  阅读(28)  评论(0编辑  收藏  举报