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())
假设我想在打印 "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())