Python IO模型

之前学到gevent 遇到IO操作,自动切换 对于一个network IO (这里我们以read举例),它会涉及到两个系统对象,一个是调用这个IO的process (or thread),另一个就是系统内核(kernel)。当一个read操作发生时,它会经历两个阶段: 1 等待数据准备 (Waiting for the data to be ready) 2 将数据从内核拷贝到进程中 (Copying the data from the kernel to the process) 记住这两点很重要,因为这些IO Model的区别就是在两个阶段上各有不同的情况。 IO模型 阻塞IO 非阻塞IO IO多路复用(监听多个连接) 异步IO 驱动信号 1 阻塞IO blocking默认...

阅读全文

Python 多线程应用

同步锁 123456789101112131415161718192021222324252627282930import timeimport threadingdef subNum(): global num # print("ok") lock.acquire() # 加锁 temp = num time.sleep(1) num = temp - 1 # 加在公共数据上 lock.release() # 解锁num = 100thread_list = []lock = threading.Lock()for i in range(100): t = threading.Thread(target=subNum) t....

阅读全文

Python 并发编程

1 为什么有操作系统 操作系统: 位于底层和应用软件之间 工作方式: 向下管理硬件 向上提供接口 1.1 操作系统进程切换: 出现IO操作(像time.sleep之类的) 固定时间(是操作系统控制的切换时间) 1.2进程的定义:进程是一个程序在一个数据集谁给你的动态执行过程。程序、数据集(程序过程中使用的资源)、进程控制块(切换的时候 保存状态) 进程并发的时候,如果是一个应用程序,会把资源进行传递 进程是通过进程切换,是共享的资源,保存的的时候保存的是进程的资源集 进程: 资源管理单位(容器) 线程: 最小执行单位 1.3 并行和并发的区别:串行是线程依次执行,运行期间独享内存并行是每个线程占用一个内核并发是有等待 python的多线程: 由于GIL,同一时刻,同一...

阅读全文

Python socket 粘包

1 TCP的三次握手四次挥手 1.1 三次握手 1 客户端向服务端发起SYN请求,请求建立连接, 2 服务端同意建立连接,回应ACK,同时服务端向客户端发起SYN请求 3 客户端回应ACK 1.2 四次挥手挥手是任意的,客户端和服务端都可以首先断开连接 下面是以客户端发起的挥手 1 客户端发送完数据后发起FIN 请求,之后直接断开, 2 服务端返回一个ACK 3此时服务端还没有接收完数据,所以没有断开连接,接收完后,服务端想要断开,发送FIN 4 客户端返回ACK,结束 现实中的是TIME WAIT大量存在于服务端,是服务端主动断开连接,它在等待客户端发送ACK 总结 1 为什么建立连接协议是三次握手,而关闭连接却是四次握手呢? 这是因为服务端的LISTEN状...

阅读全文

Python 软件开发规范

Python的软件开发规范主要是文件的目录结构是规范化的 123456789101112131415161718192021222324252627282930├─bin├─conf│ └─__pycache__├─core│ └─__pycache__├─db├─docs├─lib│ └─__pycache__└─log''''bin 存放的是可执行文件conf 配置文件core 存放的是源码文件db 数据库文件docs文档lib 用到的模块,第三方的,自己写的包log 日志文件在根目录下面还应该有README描述项目信息的文件它需要说明以下几个事项:软件定位,软件的基本功能。运行代码的方法: 安装环境、启动命令等。简要的使用说明。代码...

阅读全文

© 2018 Peter's Blog Center All Rights Reserved.
Theme by hiero