本文主要参照知乎: Python Async/Await入门指南
简要解释await的意义
一句话版本:asyncio.wait会通过事件循环串联起多个异步函数(协程),在异步函数中会有需要await的对象,多个函数同时去调用await后的运算,一旦任意await得到结果,就去处理后面的逻辑
这篇文章评论下的一位同志看了几篇文章,说一下拙见,用这个await的场景大概是你有一堆异步函数需要调用,比如washing1 ,washing2,washing3,三个里面都有await,在主函数里调用这三个异步函数,然后三个函数都启动了,哪个await等到结果了,线程就去处理后面的逻辑,他们一般会这样写
这样实际执行时间是5秒多,而不是3 +2 +5。
感觉还是要配合异步模块好一点
#
async def washing1():
await asyncio.sleep(3) # 使用 asyncio.sleep(), 它返回的是一个可等待的对象
print('washer1 finished')
async def washing2():
await asyncio.sleep(2)
print('washer2 finished')
async def washing3():
await asyncio.sleep(5)
print('washer3 finished')
# 1. 创建一个事件循环
loop = asyncio.get_event_loop()
# 2. 将异步函数加入事件队列
tasks = [
washing1(),
washing2(),
washing3(),
]
# 3. 执行事件队列, 直到最晚的一个事件被处理完毕后结束
loop.run_until_complete(asyncio.wait(tasks))
事件循环
事件循环参考文档
事件循环是每个 asyncio 应用的核心。 事件循环会运行异步任务和回调,执行网络 IO 操作,以及运行子进程。
asyncio.get_running_loop()
返回当前 OS 线程中正在运行的事件循环。
asyncio.get_event_loop()
获取当前事件循环。
如果当前 OS 线程没有设置当前事件循环,该 OS 线程为主线程,并且 set_event_loop() 还没有被调用,则 asyncio 将创建一个新的事件循环并将其设为当前事件循环。
知识补充
Python random模块和函数
Python中的random模块用于生成随机数。
import random
random.random()
print( random.randint(1,10) ) # 产生 1 到 10 的一个整数型随机数
print( random.random() ) # 产生 0 到 1 之间的随机浮点数
print( random.uniform(1.1,5.4) ) # 产生 1.1 到 5.4 之间的随机浮点数,区间可以不是整数
print( random.choice('tomorrow') ) # 从序列中随机选取一个元素
print( random.choice('abcdefghijklmnopqrstuvwxyz!@#$%^&*()')# 随机字符
print( random.sample('zyxwvutsrqponmlkjihgfedcba',5)# 多个字符中生成指定数量的随机字符:
print( random.randrange(1,100,2) ) # 生成从1到100的间隔为2的随机整数
a=[1,3,5,6,7] # 将序列a中的元素顺序打乱
random.shuffle(a) # 将序列a中的元素顺序打乱
评论 (0)