asyncio异步编程:Future对象

Future对象

Task 继承Future,Task对象内部await结果的处理基于Future对象来的。

示例1:
import asyncio

async def main():
    # 获取当前事件循环
    loop = async.get_running_loop()

    # 创建一个任务(Future对象),这个任务什么都不做
    fut = loop.create_future()

    # 等待任务最终结果(Future对象),没有结果则会一直等下去

    await fut
asynio.run(main())

# 示例2:
import asyncio


async def set_after(fut):
    await asyncio.sleep(2)
    fut.set_result('666')


async def main():
    # 获取当前事件循环
    loop = asyncio.get_running_loop()

    # 创建一个任务(Future对象),没绑定任何行为,则这个任务永远不知道什么时候结束
    fut = loop.create_future()

    # 创建一个任务(Future对象),绑定了set_after函数,函数内部在2s之后,会给fut赋值。
    # 即手动设置future任务的最终结果,那么fut就可以结束了。
    await loop.create_task(set_after(fut))

    # 等待Future对象获取最终结果,否则一直等下去
    data = await fut
    print(data)


asyncio.run(main())

# 666

 


# 3.5 concurrent.futures.Future对象
# 使用线程池、进程池实现异步操作时用到的对象
import time
from concurrent.futures import Future
from concurrent.futures.thread import ThreadPoolExecutor
from concurrent.futures.process import ProcessPoolExecutor


def func(value):
    time.sleep(1)
    print(value)
    return 123


# 创建线程池
pool = ThreadPoolExecutor(max_workers=5)

# 创建进程池
# pool = ProcessPoolExecutor(max_workers=5)


for i in range(10):
    fut = pool.submit(func, i)
    print(fut)


# 以后写代码可能会存在交叉时间。例如:CRM项目80%都是基于协程异步编程 + MySQL(不支持)【线程、进程做异步编程】
import time
import asyncio
import concurrent.futures


def func1():
    time.sleep(2)
    return "123"
 
async def main():
    loop = asyncio.get_running_loop()

    fut = loop.run_in_executor(None, func1)
    result = await fut
    print('default thread pool', result)



asyncio.run(main())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值