zoukankan      html  css  js  c++  java
  • python note 34 并发

    1、socket发送请求

    import socket
    import requests
    
    # 方式一
    ret = requests.get('https://www.baidu.com/s?wd=alex')
    
    # 方式二
    client = socket.socket()
    client.connect(('www.baidu.com',80))
    client.sendall(b'GET /s?wd=alex HTTP/1.0
    host:www.baidu.com
    
    ')
    chunk_list = []
    while True:
        chunk = client.recv(8096)
        if not chunk:
            break
        chunk_list.append(chunk)
    
    body = b''.join(chunk_list)
    print(body.decode('utf-8'))

    2、解决并发

    单线程
    import socket
    import requests
    
    key_list = ['alex','db','sb']
    for item in key_list:
        ret = requests.get('https://www.baidu.com/s?wd=%s' %item)

    3、setblocking(False)将原来阻塞的位置变成非阻塞

    import socket
    
    client = socket.socket()
    client.setblocking(False) # 将原来阻塞的位置变成非阻塞(报错)
    # 百度创建连接: 阻塞
    
    try:
        client.connect(('www.baidu.com',80)) # 执行了但报错了
    except BlockingIOError as e:
        pass
    
    # 检测到已经连接成功
    
    # 问百度我要什么?
    client.sendall(b'GET /s?wd=alex HTTP/1.0
    host:www.baidu.com
    
    ')
    
    # 我等着接收百度给我的回复
    chunk_list = []
    while True:
        chunk = client.recv(8096) # 将原来阻塞的位置变成非阻塞(报错)
        if not chunk:
            break
        chunk_list.append(chunk)
    
    body = b''.join(chunk_list)
    print(body.decode('utf-8'))

    4、协程

    import greenlet
    
    def f1():
        print(11)
        gr2.switch()
        print(22)
        gr2.switch()
    
    def f2():
        print(33)
        gr1.switch()
        print(44)
    
    # 协程 gr1
    gr1 = greenlet.greenlet(f1)
    # 协程 gr2
    gr2 = greenlet.greenlet(f2)
    
    gr1.switch()
  • 相关阅读:
    php yield学习笔记(一)
    EasySwoole的ContextManager的分析和使用
    Easyswoole的WaitGroup和Csp组件的分析和使用
    Laravel Event的分析和使用
    Laravel驱动管理类Manager的分析和使用
    Laravel Exception结合自定义Log服务的使用
    vue基础
    vue.js
    改善项目组织
    MongoDB 4.0版
  • 原文地址:https://www.cnblogs.com/P-Z-W/p/11226359.html
Copyright © 2011-2022 走看看