python - 理解 Python async / await 与 Node js async / await 的比较
问题描述
我正在学习 Python 中的异步编程。我写了一些代码来模拟在 Python 和 Node 中获取 url;结果不同,我不知道为什么。
Python
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...
节点结果是我所期望的。我的理解是,创建的任务在create_task
等待(在 for 循环中)之前不会开始执行;但是如果第一个任务尚未完成,for 循环如何提前开始执行第二个任务?
感谢您对此的帮助
解决方案
我的困惑来自于没有意识到这create_task
是用来启动协同程序同时运行的。可以修改 Python 代码,以便通过省略create_task
并只是等待任务来给出节点结果:
async def main():
for task in tasks:
await asyncFunc()
print('done waiting...')
Usingcreate_task
类似于Promise.all
在 Node.js 中使用一系列 Promise
推荐阅读
- css - 让我的搜索框更适合移动设备
- cron - 如何在 crontab 中安排 Teradata 查询?
- sed - 使用 sed "r" 搜索文本并附加文件内容
- javascript - 如何使来自 regular-expressions.info 的电子邮件验证正则表达式在 javascript 中工作?
- ios - 为什么此动画在第一遍时无法正常工作,但在所有后续遍中都如此?(反应原生)
- javascript - require.define 在下面的代码段中是什么意思?
- python-3.x - 在pygame中保留中心的同时旋转图像
- bash - bash条件中npm测试的grep结果
- c# - CS0121 'Task.Run 之间的调用不明确
(功能 )' 和 'Task.Run(Func )' - node.js - 带有承载策略的 passport-azure-ad veriy msal.js 令牌