python async函数_python asyncios create_task and await函数
你提出了三种不同的方案:没有await语句(两者都注释掉)仅使用await task1(注释掉第二个)仅使用await task2(第一个命令出来)这是您的脚本;将task2上的睡眠时间延长一点,只是为了举例说明。在# tasktest.pyimport timeimport asyncioasync def say_after(delay, what):await asyncio.sleep(d
你提出了三种不同的方案:没有await语句(两者都注释掉)
仅使用await task1(注释掉第二个)
仅使用await task2(第一个命令出来)
这是您的脚本;将task2上的睡眠时间延长一点,只是为了举例说明。在# tasktest.py
import time
import asyncio
async def say_after(delay, what):
await asyncio.sleep(delay)
print(what)
async def main():
task1 = asyncio.create_task(
say_after(1, 'hello'))
task2 = asyncio.create_task(
say_after(3, 'world'))
print('started at', time.strftime('%X'))
await task1
# await task2
print('finished at', time.strftime('%X'))
asyncio.run(main())
1。没有await语句
这是^{}的肉:
^{pr2}$
重要的是,循环仅关心main()是否完成,然后取消与正在运行的事件循环关联的所有其他任务。(每个任务在指定时是tied to一个事件循环。)
如果定义main()而不使用任何await语句,create_task()将调度要执行的任务,但main()不会等待其中任何一个语句完成。在
2。await task1
设置:await task1
# await task2
输出:(base_py37) $ python3 tasktest.py
started at 11:06:46
hello
finished at 11:06:47
这两个任务都从挂起转移到正在运行,但只有task1完成,因为main()只等待一个耗时约1秒的任务,时间不足以让task2运行。*(注意,main()只需1秒)
3。await task2
设置:# await task1
await task2
输出:(base_py37) $ python3 tasktest.py
started at 11:08:37
hello
world
finished at 11:08:40
这两个任务都从挂起转移到正在运行,现在task1和task2都完成了,因为main()等待的任务耗时~3秒,足够两个任务运行到完成。在
*这至少适用于我的设置(Mac OSX,…),但正如这里的另一个答案中所提到的,在另一个设置中,时间可能会不同,如果任务运行时间相似,则两者都可能在案例2中运行。
更多推荐
所有评论(0)