python协程学习

工作过程,参考python官方手册实现了一个socket长连接的客户端,使用了asyncio库中的streamreader,实现过程中抓耳挠腮,有些地方百思不得其解,虽然工作交差了,但回来还是找了python协程相关资料,认为A. Jesse Jiryu Davis这位python大神的视频讲解,极为通俗易懂,
推荐指数:

协程学习

第一阶段案例学习

首先,使用阻塞

socket客户端

from selectors import DefaultSelector,EVENT_WRITE,EVENT_READ
import socket
import time

selector = DefaultSelector()

def get(path):
    s = socket.socket()
    s.setblocking(False)
    try:
        s.connect(('127.0.0.1',5000))
    except BlockingIOError:
        pass
    request = 'GET %s HTTP/1.0\r\n\r\n' % path
    
    #可写
    selector.register(s.fileno(), EVENT_WRITE)
    selector.select()
    selector.unregister(s.fileno())

    s.send(request.encode())
    
    chunks = []
    while True:
        #可读
        selector.register(s.fileno(), EVENT_READ)
        selector.select()
        selector.unregister(s.fileno())        
        chunk = s.recv(10)
        if chunk:
            print("recive chunk:%s" % chunk)
            chunks.append(chunk)
        else:
            body = (b''.join(chunks)).decode()
            print(body.split('\n')[0])
            return

start = time.time()
get('/foo')
get('/bar')
print('took %.2f sec' % (time.time()-start))    
## 参考
- [1] [一个使用 asyncio 协程的网络爬虫](https://linux.cn/article-8265-1.html)
- [2] [Python协程工作原理](https://www.bilibili.com/video/BV1N4411S7BP?t=32&p=2)

你可能感兴趣的:(python)