python多线程编程——《python核心编程第四章》

1 引言

首先区分几个概念:

程序——能被计算机执行的文件; 
进程——处于执行状态的程序,包含计算机为其分配的空间、内存、数据栈等资源; 
线程——也称轻量级进程(迷你进程),在同一进程下执行,拥有相同的上下文(线程间消息传递更方便);可以认为他们是在同一主进程或“主线程”中并行运行的一些“迷你进程”。

从上面的概念可以发现:

针对能够采用多线程编程的任务,如一个进程可以拆解为多个并发执行的子任务的情况,其效率肯定比单进程顺序执行的效率高。但是,由于多线程在同一上下文环境下执行,对一些公用资源会出现竞争的情况,如何解决些问题?

这就是贯穿本章的两个重点:

  • 如何实现多线程编程?(需要用哪些模块的那些方法?)
  • 如何解决资源的同步问题?(即锁的问题。)

2 几种多线程编程实现方法

常见多线程编程的实现方法包括:

  • thread模块实现;
  • threading模块实现;

2.1 thread模块的多线程实现

  • 首先,看看最基本的多线程实现。 
    Paste_Image.png
    上面程序中之所以要加sleep(6)是因为thread模块中没有守护进程,导致最先执行完的进程结束后,整个程序会退出。这也是推荐用threading模块的主因。 
    在每个程序中添加sleep(6)这样的等待函数显然不合适,我们再看看加上锁以后的一个改进版本。

  • thread模块中锁的使用 
    图片发自简书App

2.2 thread模块的多线程实现

  • 方法一:创建Thread的实例,传给它一个函数。

Paste_Image.png

  • 方法二:创建Thread的实例,传给它一个实例。

Paste_Image.png

  • 方法三:派生Thread的子类,再将子类实例化。

Paste_Image.png

3 同步原语的几种形式

  • 锁Lock;
  • 信号量(计数器)方法实现;
  • Queue模块实现;

3.1 锁Lock

Paste_Image.png

3.2 信号量(计数器)的使用

Paste_Image.png

3.3 Queue模块队列的应用

Paste_Image.png

4 总结

扯了这么久,多线程到底是个什么东西? 
简而言之:

如果要执行某个算法或函数,单线程会顺序的执行其中的每一步,直至结束;多线程可以同时执行多个算法或函数,这样效率就更高。


猜你喜欢

转载自blog.csdn.net/qq_36312376/article/details/79709468
今日推荐