zoukankan      html  css  js  c++  java
  • #非阻塞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)) #字符串拼接


  • 相关阅读:
    python实现梯度下降法
    sklearn评估模型的方法
    sklearn进行拟合
    装饰器原理-代码解释
    多进程+协程 处理IO问题
    mongodb增删改查
    关于Redis在Linux手动安装配置
    MongoDB安装配置及使用
    键盘没有小键盘怎么办?怎么打开屏幕软键盘?
    WebService中WSDL和WADL(转)
  • 原文地址:https://www.cnblogs.com/yuanjia8888/p/8690151.html
Copyright © 2011-2022 走看看