python等待有哪两种方式,说说两种方式的异同,并编写一段代码用到这两种等待方式。
时间: 2024-06-09 07:11:53 浏览: 8
Python中常见的等待方式有阻塞和非阻塞两种方式。
阻塞等待是指程序执行到某个点时,如果该点数据没有准备好,则程序会一直等待,直到数据准备好为止。这种方式会阻塞程序的执行,直到等待完成后才会继续执行后面的代码。
非阻塞等待是指程序执行到某个点时,如果该点数据没有准备好,则程序不会一直等待,而是直接返回一个错误或空值,程序继续执行后面的代码。这种方式不会阻塞程序的执行,但需要程序轮询数据是否准备好,因此会增加CPU的负担。
下面是使用阻塞等待和非阻塞等待的代码示例:
```
# 阻塞等待示例
import time
def download(url):
print(f"开始下载 {url}")
time.sleep(3) # 模拟下载需要3秒
print(f"{url} 下载完成")
urls = ["https://www.baidu.com", "https://www.google.com", "https://www.bing.com"]
for url in urls:
download(url)
# 非阻塞等待示例
import time
import urllib.request
def download(url):
print(f"开始下载 {url}")
response = urllib.request.urlopen(url)
while True:
data = response.read(1024)
if not data:
break
print(f"{url} 下载中...")
print(f"{url} 下载完成")
urls = ["https://www.baidu.com", "https://www.google.com", "https://www.bing.com"]
for url in urls:
download(url)
```
可以看到,阻塞等待的代码中,程序会依次下载每个URL,并在下载完成后才会继续执行后面的代码。而非阻塞等待的代码中,程序会同时下载多个URL,并在下载过程中不断轮询数据是否准备好,从而实现了并行下载的效果。