python使用Future、async、await、wait、gather、ensure_future、as_completed

参考:https://blog.csdn.net/weixin_45139605/article/details/90798253

参考:https://www.cnblogs.com/ssyfj/p/9219360.html

参考:https://www.cnblogs.com/xiao-xue-di/p/10274065.html

参考:https://www.jianshu.com/p/b5e347b3a17c

1.Future:

# coding=utf-8


import functools
import asyncio
import threading
import time


def printInfo(f, n):
    print("printInfo: {}, {}".format(f, n))
    # f.set_result("ok")


async def one(allDone):
    print("one: start")
    allDone.add_done_callback(functools.partial(printInfo, n="i1"))
    allDone.add_done_callback(functools.partial(printInfo, n="i2"))
    print("one: middle")
    # allDone.set_result("ok")
    print("one: end")


async def deal(loop, allDone):
    print("deal: begin")
    # loop.call_soon(printInfo, allDone, "i3")
    # loop.call_later(3, printInfo, allDone, "i4")
    await one(allDone)
    start = time.time()

    def wait(n):
        print("wait: n={}, {}".format(n, time.time()-start))
        allDone.set_result("ok")
        print("wait end")

    loop.call_later(2, wait, "i5")
    print("deal: middle {}".format(allDone))
    await allDone
    print("deal: second {}".format(allDone))
    print("deal: end")

if __name__ == "__main__":
    loop = asyncio.get_event_loop()

    try:
        allDone = asyncio.Future()
        loop.run_until_complete(deal(loop, allDone))
        print("loop end")
    finally:
        loop.close()

结果:

deal: begin
one: start
one: middle
one: end
deal: middle <Future pending cb=[printInfo(n='i1')() at e:\study\py\async\asyn.py:10, printInfo(n='i2')() at e:\study\py\async\asyn.py:10]>
wait: n=i5, 2.0034987926483154
wait end
printInfo: <Future finished result='ok'>, i1
printInfo: <Future finished result='ok'>, i2
deal: second <Future finished result='ok'>
deal: end
loop end
PS E:\study\py\async>

2.多任务:

# coding=utf-8


import asyncio
import threading
import datetime


async def hello(name):
    for n in range(3):
        print("hello: start {},{}, {}".format(
            name, n, threading.currentThread()))
        await asyncio.sleep(1)
        print("hello: endtt {},{}, {}".format(
            name, n, threading.currentThread()))

if __name__ == "__main__":
    loo
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值