版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
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