first_coroutine
import asyncio
# 定义一个协程
async def main():
print("Hello")
await asyncio.sleep(1) # 模拟异步操作
# 在协程中,对于那些会发生I/O阻塞的操作,使用await来等待它们完成,不能使用time.sleep
print("World")
if __name__ == "__main__":
cor = main() # 创建协程对象
asyncio.run(cor) # 运行协程
2async_time统计时间装饰器
import time
from functools import wraps
def async_time(func):
@wraps(func)
async def wrapper(*args, **kwargs):
print(f"开始执行{func},参数:{args}, {kwargs}")
start_time = time.time()
try:
return await func(*args, **kwargs)
except Exception as e:
print(f"An error occurred: {e}")
raise
finally:
end_time = time.time()
total_time = end_time - start_time
print(f"结束执行{func},耗时:{total_time:.4f}秒")
return wrapper
import asyncio
import time
from utils import async_time
# 定义一个协程
@async_time
async def main():
print("Hello")
await asyncio.sleep(1)
print("World")
# 上诉@async_time和async def main()等价于:
# wrapper = async_time(main) # 将main函数传递给async_time装饰器
if __name__ == "__main__":
cor = main() # 创建协程对象
asyncio.run(cor) # 运行协程
3concurrency
import asyncio
from utils import async_time
async def greet(name, delay):
await asyncio.sleep(delay)
print(f"Hello, {name}!")
# todo 这样写是同步运行没有达到并发的效果
# @async_time
# async def main():
# # 执行两个协程
# result1 = await greet("Alice", 3)
# print(result1)
# result2 = await greet("Bob", 2)
# print(result2)
# 执行的结果如下:
"""
开始执行<function main at 0x000002214FFBA020>,参数:(), {}
Hello, Alice!
None
Hello, Bob!
None
结束执行<function main at 0x000002214FFBA020>,耗时:5.0037秒
"""
# todo 这样写是并发运行的
# @async_time
# async def main():
# # 并发运行,必须要将协程包装成Task任务对象,才能够并发执行
# task1 = asyncio.create_task(greet("Alice", 3))
# task2 = asyncio.create_task(greet("Bob", 2))
# # 对创建好的应用进行await
# result1 = await task1
# print(result1)
# result2 = await task2
# print(result2)
# 执行的结果如下:
"""
开始执行<function main at 0x000001FEB7A93CE0>,参数:(), {}
Hello, Bob!
Hello, Alice!
None
None
结束执行<function main at 0x000001FEB7A93CE0>,耗时:3.0150秒
"""
# todo 一下是错误写法
# @async_time
# async def main():
# # 这样直接运行没有一点效果执行时间
# task1 = await asyncio.create_task(greet("Alice", 3))
# print(task1)
# task2 = await asyncio.create_task(greet("Bob", 2))
# print(task2)
# 执行的结果如下:
"""
开始执行<function main at 0x0000025842C03CE0>,参数:(), {}
Hello, Alice!
None
Hello, Bob!
None
结束执行<function main at 0x0000025842C03CE0>,耗时:5.0237秒
"""
@async_time
async def main():
# 并发运行,必须要将协程包装成Task任务对象,才能够并发执行
task1 = asyncio.create_task(greet("Alice", 3))
task2 = asyncio.create_task(greet("Bob", 2))
# 对创建好的应用进行await
r1 = await task1
print(r1)
r2 = await task2
print(r2)
"""
开始执行<function main at 0x000001E8E3653CE0>,参数:(), {}
Hello, Bob!
Hello, Alice!
None
None
结束执行<function main at 0x000001E8E3653CE0>,耗时:2.9943秒
"""
if __name__ == "__main__":
asyncio.run(main())
tomrrow:https://www.bilibili.com/video/BV16kTazbEwe?spm_id_from=333.788.player.switch&vd_source=3ef97fd9754fa6319c22dc6f1b4b3275&p=7