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

1 引言

首先区分几个概念:

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

从上面的概念可以发现:

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

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

    1. 如何实现多线程编程?(需要用哪些模块的那些方法?)
    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 总结

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 又来到了一个老生常谈的问题,应用层软件开发的程序员要不要了解和深入学习操作系统呢? 今天就这个问题开始,来谈谈操...
    tangsl阅读 4,197评论 0 23
  • Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么? 1...
    AlanGe阅读 1,845评论 0 17
  • 本文主要讲了java中多线程的使用方法、线程同步、线程数据传递、线程状态及相应的一些线程函数用法、概述等。 首先讲...
    李欣阳阅读 2,517评论 1 15
  • 在无数回精神抖擞 斗志昂扬的拜读无数篇抗击幼儿高烧母亲的英雄事迹后 我也迎来了自己的第一场战役 ... 孩子...
    王小安安阅读 228评论 0 0
  • 也许是昨晚太过放纵,顾非然一直在熟睡,叶镜不想打扰他,也就倚在床上,随意的任思绪飘散……日上三竿时,顾非然才...
    宫长青筝阅读 346评论 0 0