首页 > 解决方案 > 如何使事件循环同时运行任务?

问题描述

我想在 中同时调用两个函数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

标签: pythonconcurrencypython-asyncio

解决方案


你忘了使用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()

推荐阅读