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 方式,与第一种(线程)之间的主要区别在于,后者是操作系统内核