分类 Python 下的文章

Python 导包技巧


起因

起初学 Go 语言的时候,对它的导包规则感到痛苦,——“那么麻烦干嘛呢!”。但最近接到一些新功能开发任务,于是 “啪嗒啪嗒” 写代码,结果更痛苦了。公司项目目录规划打一开始就不合理,以此为基础的 “繁荣发展” 导致更多混乱与麻烦。于是马上翻开《Python cookbook》解惑,有些心得,这里记之。


NumPy的使用


前言

为什么在 Python 已有 list 基础类型的状况下,还要用 NumPy 处理数据?

关于 NumPy 的优势有以下几点:

  1. 列表 list 的元素在系统内存中分散存储,NumPy 数组存储在一个均匀连续的内存块中;
  2. 缓存会直接把字节块从 RAM 加载到 CPU 寄存器中;
  3. NumPy中的矩阵计算可以采用多线程方式,充分利用多核 CPU 计算资源。

如果对上述内容用一个字做总结,那就是:NumPy ,

NumPy中的两个重要对象:ndarray(解决多维数组问题),ufunc(对数组进行处理的函数)。


IO复用与DefaultSelector的使用


前言

UXNIX系统中,I/O操作分两个阶段:

  • 第一阶段:用户进程等待内核把数据准备好
  • 第二阶段:用户进程从内核中拷贝数据

根据对两个阶段的不同处理,由此划分出五个I/O模型,分别是:

  • 阻塞式I/O
  • 非阻塞式I/O
  • I/O复用
  • 信号驱动式I/O
  • 异步I/O

五种模型的区别,可见图解UNIX的I/O模型。此文清晰明朗,极易理解。


ThreadPoolExecutor源码分析


前言

Python中,ThreadPoolExecutor对Thread做了进一步封装。在Thread基础之上,使得多线程开发更简单了。另一方面,由于还存在ProcessPoolExecutor类,多线程与多进程的开发接口得到了统一。

在整个过程中,需要理清ThreadPoolExecutor的成员方法Future的成员方法