我正在学习Python中的异步编程。我写了一些代码来模拟在Python和Node中获取URL。结果不同,我不确定为什么。
蟒蛇
async def asyncFunc():
await asyncio.sleep(3)
print('woke up...')
async def main():
tasks = [asyncio.create_task( asyncFunc() ) for i in range(3)]
for task in tasks:
await task
print('done waiting...')
asyncio.run(main())
结果:
woke up...
woke up...
woke up...
done waiting...
done waiting...
done waiting...
节点
const asyncFunc = async () => {
await mySleepFunction(3);
console.log('woke up...');
}
const main = async () => {
for (let i = 0; i < 3; i++) {
await asyncFunc();
console.log('done waiting...');
}
}
main();
结果
woke up...
done waiting...
woke up...
done waiting...
woke up...
done waiting...
Node的结果是我所期望的。我的理解是,由创建的任务create_task
只有在等待时才开始执行(在for循环中)。但是如果第一个任务尚未完成,for循环如何开始执行第二个任务?
感谢您对此的帮助
我的困惑来自于没有意识到create_task
用来启动并发运行的协程。可以修改Python代码,以便通过省略create_task
和等待任务来提供Node结果:
async def main():
for task in tasks:
await asyncFunc()
print('done waiting...')
使用create_task
类似于Promise.all
在Node.js中对诺言数组使用
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句