我编写了以下代码:
import asyncio
async def write_after(pause,text):
print('begin')
await asyncio.sleep(pause)
print(text)
async def main():
await write_after(1,'Hello...')
await write_after(2,'...world')
asyncio.run(main())
结果我得到了:
begin
Hello...
begin
...world
,在begin
秒后暂停。我想知道为什么结果不是:
begin
begin
Hello...
...world
类似于使用任务的执行程序。
答案 0 :(得分:1)
基本上,正在发生的事情是您在等待第一个结果完成,然后开始第二个函数调用并等待该结果。我认为您所期望的是这样的:
import asyncio
async def write_after(pause,text):
print('begin')
await asyncio.sleep(pause)
print(text)
async def main():
await asyncio.gather(
write_after(1,'Hello...'),
write_after(2,'...world')
)
asyncio.run(main())
这将同时启动两个协程并等待每个协程的结果。结果将是:
begin
begin
Hello...
...world
答案 1 :(得分:1)
@kingkupps分析是正确的。不幸的是,myy asyncio
模块没有run
方法(Python 3.7),因此可以选择:
import asyncio
async def write_after(pause,text):
print('begin')
await asyncio.sleep(pause)
print(text)
def main():
loop = asyncio.get_event_loop()
loop.run_until_complete(
asyncio.gather(
write_after(1, 'Hello'),
write_after(2, '...world')
)
)
main()
打印:
begin
begin
Hello
...world