Python多线程编程

为什么需要使用多线程

发挥处理器的强大能力

  • 在多处理器上,多线程可以通过提高处理器资源的利用率来提高系统的吞吐率。
  • 在单处理器系统上也可以获得更高的吞吐率,比如说多线程程序在等待某个同步 I/O 操作时,还有其他线程可以继续运行。

建模的简单性

  • 完成单任务时,很简单,只要把这件事做好就行。但是在完成多任务的时候,不仅要把活干好,还要考虑不同任务之间存在优先级和时间。

异步事件的简化处理

  • 在使用多线程编程时,一部分线程可以接受客户端的连接请求请求,另一部分线程还可以继续处理业务逻辑。
  • 如果是单线程程序的话,处理请求时会停顿导致接受请求被阻塞,为了避免这个问题单线程程序必须使用非阻塞的 I/O,这种 I/O 的复杂性要远远高于同步 I/O。

Python多线程使用

Python 提供了两个标准库用于多线程编程,即 thread 模块和 threading 模块。

Python多线程编程选择

  • thread 和 threading 模块都可以用来创建和管理线程,而 thread 模块提供了基本的线程和锁支持。而 threading 模块则提供的是更高级的完全的线程管理。
  • 低级别的 thread 模块是推荐给高手用,一般应用程序推荐使用更高级的 threading 模块。
  • threading 模块更先进,有完善的线程管理支持,此外,在 thread 模块的一些属性会和 threading 模块的这些属性冲突。
  • thread 模块有很少的(实际上是一个)同步原语,而 threading 却有很多。
  • thread 模块没有很好的控制,特别当你的进程退出时,而 threading 会允许默认,重要的子线程完成后再退出,它可以特别指定 daemon 类型的线程。