【发布时间】:2022-06-12 18:08:13
【问题描述】:
当我运行代码时:
import asyncio
async def foo(text):
print(text)
await asyncio.sleep(1)
print(text)
async def main():
print("tim")
task = asyncio.create_task(foo("text"))
await asyncio.sleep(1)
print("finished")
asyncio.run(main())
输出是:
tim
text
finished
text
但是,当我将 main() 函数中的睡眠时间更改为 0.5 时:
import asyncio
async def foo(text):
print(text)
await asyncio.sleep(1)
print(text)
async def main():
print("tim")
task = asyncio.create_task(foo("text"))
await asyncio.sleep(0.5)
print("finished")
asyncio.run(main())
输出是:
tim
text
finished
然后,当我将 main() 函数中的睡眠时间更改为 0.99 时:
import asyncio
async def foo(text):
print(text)
await asyncio.sleep(1)
print(text)
async def main():
print("tim")
task = asyncio.create_task(foo("text"))
await asyncio.sleep(0.99)
print("finished")
asyncio.run(main())
输出是:
tim
text
finished
text
请问为什么最后的“文本”在第一种和第三种情况下打印但在第二种情况下没有打印?谢谢。
还有一个问题:
第一种情况,如果asyncio.run()在main()函数中的print("finished")之后结束,为什么foo()任务中的print(text)仍然执行。这是因为@Paul Cornelius 的回答中所说的大约 15 毫秒的粒度吗?
此外,我在 main() 函数中添加了一个额外的 time.sleep(),因此 foo() 任务中的 await 比 main() 任务的完成更早结束。但是在这种情况下,main() 函数在 print("finished") 之后不会执行 foo() 任务:
async def foo(text):
print(text)
await asyncio.sleep(1)
print(text)
async def main():
print("tim")
task = asyncio.create_task(foo("text"))
await asyncio.sleep(0.5)
time.sleep(1)
print("finished")
asyncio.run(main())
输出是:
tim
text
finished
【问题讨论】:
标签: python asynchronous async-await task python-asyncio