Python Async/Await入门

连祈
2022-12-06 / 0 评论 / 4 阅读 / 正在检测是否收录...
温馨提示:
本文最后更新于2022年12月06日,已超过865天没有更新,若内容或图片失效,请留言反馈。

本文主要参照知乎: 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

评论 (0)

取消