簡體   English   中英

如何使事件循環同時運行任務?

[英]How to make event loop run task concurrently?

我想在 asyncio 中同時調用兩個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()

這將是 output:

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()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM