Python协程(Asyncio)-如何?

Python Coroutine(Asyncio) - How to?

假设我想在打印 "Foo" 之前打印 "Main"。 在Lua中,可以用这段代码实现:

local function sleep(sec)
    local start_sleep = os.clock()
    while os.clock() - start_sleep <= sec do
    end
end

local function foo()
    sleep(2)
    print("Foo")
end

local function main()
    coroutine.wrap(foo)()
    print("Main")
end

main()

--[[ 

// Output:

Main
-- waits 2 seconds
Foo

]]

但如果我尝试在 Python 中实现它,它会:

import asyncio

async def foo():
    await asyncio.sleep(2)
    print("Foo")

def main():
    asyncio.run(foo())
    print("Main")

main()

"""
// Output:

-- waits 2 seconds
Foo
Main

"""

因为我真的是 Python 的初学者,我想知道如何用 Python 实现它。

目前使用asyncio.gather()到运行个协程:

from asyncio import gather, run, sleep


async def aprint(*args, **kwargs):
    return print(*args, **kwargs)


async def foo():
    await sleep(2)
    await aprint("Foo")

async def main():
    await gather(
        foo(),
        aprint("Main")
    )

run(main())