python I/O 多路复用

Posted zzzzy09

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python I/O 多路复用相关的知识,希望对你有一定的参考价值。

总结:
1. socket默认是否是阻塞的?阻塞体现在哪里?

2. 如何让socket编程非阻塞?
client.setblocking(False) #非阻塞

3. IO多路复用作用?
检测多个socket是否发生变化。
操作系统检测socket是否发生变化,有三种模式:
select:最多1024个socket;循环去检测。
poll:不限制监听socket个数;循环去检测(水平触发)。
epoll:不限制监听socket个数;回调方式(边缘触发)。
Python模块:
select.select
select.epoll

4. 提高并发方案:
- 多进程
- 多线程
- 异步非阻塞模块(Twisted) scrapy框架(单线程完成并发)

5. 什么是异步非阻塞?
- 非阻塞,不等待。
比如创建socket对某个地址进行connect、获取接收数据recv时默认都会等待(连接成功或接收到数据),才执行后续操作。
如果设置setblocking(False),以上两个过程就不再等待,但是会报BlockingIOError的错误,只要捕获即可。
- 异步,通知,执行完成之后自动执行回调函数或自动执行某些操作(通知)。
比如做爬虫中向某个地址baidu.com发送请求,当请求执行完成之后自执行回调函数。

6. 什么是同步阻塞?
- 阻塞:等
- 同步:按照顺序逐步执行

以上是关于python I/O 多路复用的主要内容,如果未能解决你的问题,请参考以下文章

Python3标准库:selectors I/O多路复用抽象

11.python并发入门(part15 关于I/O多路复用)

Python开发第十章:I/O多路复用异步I/O(综合篇)

python之IO多路复用——selectpollepoll详解

python协程和异步IO——IO多路复用

python中的IO多路复用