Python3.7 高级编程之 async/await asyncio 通过asyncio.wait 实现的异步

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/haeasringnar/article/details/100181793

Python中的异步

# demo.py
import asyncio, time

# asyncio.wait() 等待执行完成
async def foo():
    await asyncio.sleep(2)
    return 50


async def main():
    task = asyncio.create_task(foo())
    # 执行其他任务 
    print('看看会不会提前出现...')
    done, pending = await asyncio.wait({task}) # 启动协程 并创建一个等待对象
    # 手动在这里等待
    if task in done: # 当task出现在done中时,说明任务已经完成,可以退出
        print(task)
    # 问题:如果我们想想nodejs 那样 任务再一开始就被执行,如果它是耗时操作,但它不会影响后面代码的执行?

asyncio.run(main())

运行

python demo.py

预期的输出

看看会不会提前出现...
<Task finished coro=<foo() done, defined at my_asyncio/demo07.py:4> result=50>

对比nodejs中的异步非阻塞代码

// demo.js
function timeout(ms) {
    setTimeout(function(){
        console.log('输出...')
        var end_time = (new Date().getTime()) / 1000
        console.log('程序真正完成时间:', end_time - start_time)
    },ms);
    
}
// nodejs 就是一个完全的非阻塞的
var start_time = (new Date().getTime()) / 1000
timeout(2000)
var end_time = (new Date().getTime()) / 1000
console.log('完成时间:', end_time - start_time)

运行

node demo.js

预期的输出

完成时间: 0.0009999275207519531
输出...
程序真正完成时间: 2.003000020980835

猜你喜欢

转载自blog.csdn.net/haeasringnar/article/details/100181793
今日推荐