python async await threading_Python - 从使用线程到使用 async/await

本文介绍了从使用线程到使用Python的async/await进行异步编程的转变。对比了线程和async/await的区别,强调async/await通过事件循环实现非抢占式多任务处理,减少了线程同步的开销。通过实例展示了如何使用aiohttp和asyncio库进行异步HTTP请求,以及如何避免竞态条件。最终提供了一个完整的异步下载图片的代码示例。
摘要由CSDN通过智能技术生成

async/await 是一种异步编程方法,还有两种你可能听过,1. 回调

2. Promise

(写过 JavaScript 的肯定很熟悉了)

异步意味着任务不会阻塞,比如,如果我要下载一个比较忙的网络资源,我的程序不需要一直等待下载完成,它可以在等待下载时继续做其他事情。这与并行执行多个操作不同。以下伪代码比较容易理解:

# 慢方法

page = get_page_sync('some_page')

# 会阻塞整个程序的运行

print(page)

有两种方法可以改善上述的情况

(一)首先,让我们试试使用线程。通过使用线程,我们可以将 get_page_sync 调用放到单独的线程去执行,这样主线程 就可以继续执行其他操作。

# 将慢方法放到单独的线程执行

t = threading.thread(

target = get_page_sync('some_page',args=('some_page',))

)

t.run()

# 在线程运行时执行其他操作

do_something_else()

# 等待线程完执行成

t.join()

线程有几个优缺点,主要的缺点是:1. 必须在改变共享数据前锁定共享数据

2. 只能通过传递给主线程消息来处理线程内的异常

(二)现在我们试试第二种中的 async/await,Python3.5 开始支持的 async/await 方式,与第一种(线程)之间的主要区别在于,后者是操作系统内核

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值