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()
输出:
22 1662981169.611884
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
34 1662981178.6087167