python协程asyncio:async与await

Posted zhangphil

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python协程asyncio:async与await相关的知识,希望对你有一定的参考价值。

python协程asyncio:async与await

import asyncio
import random
import sys
import time

fmt = 1000000000


async def my_task(id: int):
    t = random.randint(2, 10)

    # 模拟一段耗时的操作...
    print(f'task-id', 'start', time.time_ns() / fmt)
    print(f'task-id 需耗时', t)
    await asyncio.sleep(t)
    print(f'task-id', 'end  ', time.time_ns() / fmt)

    return id, t


if __name__ == '__main__':
    print(sys._getframe().f_code.co_name, sys._getframe().f_lineno, time.time_ns() / fmt)

    # python 3.10+
    loop = asyncio.new_event_loop()

    # 批量运行异步任务
    tasks = []
    for i in range(3):
        task = loop.create_task(my_task(i), name=str(i))
        tasks.append(task)

    print(sys._getframe().f_code.co_name, sys._getframe().f_lineno, time.time_ns() / fmt)
    loop.run_until_complete(asyncio.wait(tasks))
    print(sys._getframe().f_code.co_name, sys._getframe().f_lineno, time.time_ns() / fmt)
    loop.close()

输出:

<module> 22 1662981169.611884
<module> 32 1662981169.6128838
task-0 start 1662981169.6128838
task-0 需耗时 9
task-1 start 1662981169.6128838
task-1 需耗时 2
task-2 start 1662981169.6128838
task-2 需耗时 7
task-1 end   1662981171.6129637
task-2 end   1662981176.623158
task-0 end   1662981178.6087167
<module> 34 1662981178.6087167

以上是关于python协程asyncio:async与await的主要内容,如果未能解决你的问题,请参考以下文章

python asyncio 异步 I/O - 协程(Coroutine)与运行

python协程(4):asyncio

#yyds干货盘点# 听说过python协程没?听说过 asyncio 库没?都在这一篇博客了

Python协程&asyncio&异步编程

你必须要会uvloop!让Python asyncio异步编程性能直逼Go协程性能

Python异步IO之协程:使用asyncio的不同方法实现协程