python - 如何使事件循环同时运行任务?
问题描述
我想在 中同时调用两个函数asyncio
,我用 来做loop.create_task
,但我发现它实际上不是并发的。
这是我的代码:
import asyncio
async def foo(v):
print(f"start {v}")
for i in range(5):
print(f"work in {v}")
print(f"done {v}")
def schedule_foo():
print("out start 1")
loop.create_task(foo(1))
print("out start 2")
loop.create_task(foo(2))
loop = asyncio.get_event_loop()
schedule_foo()
loop.run_forever()
这将输出:
out start 1
out start 2
start 1
work in 1
work in 1
work in 1
work in 1
work in 1
done 1
start 2
work in 2
work in 2
work in 2
work in 2
work in 2
done 2
如您所见,主循环是异步的,但子任务实际上是同步的。
我的问题是how can I make the function run in concurrently actually
?
解决方案
你忘了使用await
:
import asyncio
async def foo(v):
print(f"start {v}")
for i in range(5):
print(f"work in {v}")
await asyncio.sleep(0.1)
print(f"done {v}")
def schedule_foo():
print("out start 1")
loop.create_task(foo(1))
print("out start 2")
loop.create_task(foo(2))
loop = asyncio.get_event_loop()
schedule_foo()
loop.run_forever()
推荐阅读
- c# - 通过 CSOM 将 Sharepoint 中的文件夹共享给外部和内部用户
- c++ - 修复错误:引用变量的声明需要初始化器
- android - Android Google auth 奇怪的问题
- timer - 在 swiftUI 中重复 24 小时计数器
- c# - 使用 FFMPEG 流式传输 YouTube 音频的示例
- react-native - 具有相同滚动方向的嵌套 FlatList 不滚动
- excel - 使用 VBA 设置形状/图片的公式
- r - 从 r 中的嵌套数据框构建 json
- python - 有没有办法在 Jupyter markdown 中动态更改字体颜色?
- sql-server - 将插入的字符串转换为同一插入中的日期