#非阻塞I/0       ->收快递,不断的去问,有没有送到,有没有送到,...如果送到了就接收 # socket非阻塞请求网站(时间消耗在不断的while循环中,和阻塞的时间差不多)



#非阻塞I/0       ->收快递,不断的去问,有没有送到,有没有送到,...如果送到了就接收

# socket非阻塞请求网站(时间消耗在不断的while循环中,和阻塞的时间差不多)

import socket
import time

def blocking(pn): #页码
sock = socket.socket()

sock.setblocking(False) #加了这个阻塞IO 就会变成非阻塞IO
url = 'www.baidu.com'
port = 80
try:
#connect 肯定是需要一定时间
sock.connect((url, port)) #在请求的时候可能出现的异常 这里不过问
except BlockingIOError:
pass #非阻塞套接字 出现的异常

request = 'GET {} HTTP/1.0\r\nHost: www.baidu.com\r\n\r\n'.format('/s?wd={}'.format(pn))
while True:
try:
sock.send(request.encode()) #编码发送 rrequest的内容
break
except OSError:
pass


response = b''
while True: #因为一次接受不完数据然后循环接收
try:
inf = sock.recv(1024) #非阻塞套接字, 所以就要持续接收
while inf:
response += inf
inf = sock.recv(1024) #执行完循环接收 跳出inf循环 就会break
break
except OSError: #
pass
#print(response.decode())
return response


#blocking(1)

def block_way():
for i in range(10):
blocking(i) #搜索wd = 1 和wd = 2 和wd = 3 和wd = 4 和 wd = 5

if __name__ == '__main__':
start_time = time.time()
block_way()
print("请求10次耗时为:{}".format(time.time() - start_time)) #字符串拼接


posted on 2018-04-02 09:35  袁佳佳  阅读(94)  评论(0编辑  收藏  举报

导航