首先我们来解释一下多线程:多线程我们可以理解为多个进程/多个程序同时运行,多线程最大的好处就是帮助我们提高效率,平常我们1小时完成的任务,通过多线程10分钟就可以完成,甚至更短,这个就取决于你的线程数啦。

多线程会给我们带来什么:好处:它可以大大提高我们代码处理数据的速度;缺点:代码的复杂度也将随之提高,死锁问题也将随之产生。

我们该如果入手多线程:先尝试着成功运行一份多线程代码。然后再解读这份代码,依据自己现有的知识去理解这份代码,遇到不懂的地方记下来,然后带着这些疑问去看小编的教程你会发现事半功倍的。学完后记得自己写几个多线程加以训练。

这是小编为大家准备的一份多线程示范代码:

#!/usr/bin/python3import queue
import threading
import timeexitFlag = 0class myThread (threading.Thread):def __init__(self, threadID, name, q):threading.Thread.__init__(self)self.threadID = threadIDself.name = nameself.q = qdef run(self):print ("开启线程:" + self.name)process_data(self.name, self.q)print ("退出线程:" + self.name)def process_data(threadName, q):while not exitFlag:queueLock.acquire()if not workQueue.empty():data = q.get()queueLock.release()print ("%s processing %s" % (threadName, data))else:queueLock.release()time.sleep(1)threadList = ["Thread-1", "Thread-2", "Thread-3"]
nameList = ["One", "Two", "Three", "Four", "Five"]
queueLock = threading.Lock()
workQueue = queue.Queue(10)
threads = []
threadID = 1# 创建新线程
for tName in threadList:thread = myThread(threadID, tName, workQueue)thread.start()threads.append(thread)threadID += 1# 填充队列
queueLock.acquire()
for word in nameList:workQueue.put(word)
queueLock.release()# 等待队列清空
while not workQueue.empty():pass# 通知线程是时候退出
exitFlag = 1# 等待所有线程完成
for t in threads:t.join()
print ("退出主线程")

运行结果:

开启线程: Thread-1
开启线程: Thread-2
Thread-1: Wed Apr  6 11:52:57 2017
Thread-1: Wed Apr  6 11:52:58 2017
Thread-1: Wed Apr  6 11:52:59 2017
Thread-2: Wed Apr  6 11:53:01 2017
Thread-2: Wed Apr  6 11:53:03 2017
Thread-2: Wed Apr  6 11:53:05 2017
退出主线程

一、使用Threading模板块创建线程:

1,函数方法介绍:

  • run():用以表示线程活动的方法
  • start():启动线程活动
  • join([time]):等待至线程中止。这阻塞调用线程直至线程的join() 方法被调用中止-正常退出或者抛出未处理的异常-或者是可选的超时发生。
  • isAlive():检查一个线程是否仍旧在进行
  • getName():返回一个线程的名字
  • setName():设置一个线程的名字

2,要使用theading模板实现一个新线程,你要做的有:

定义Thread类的一个子类

重写__init__(self [,args])方法

然后,重写run(self [,args])方法

在你创建新的Thread子类以后,你可以创建它的一个实例,然后引用start()来开启一个新线程。

二、同步线程

如果多个线程共同对某个数据修改,则可能出现不可预料的结果,为了保证数据的正确性,需要对多个线程进行同步。

引入“锁”的概念,锁的两种状态——锁定和未锁定

锁定:锁定部分代码不能被其他程序运行

未锁定:多个线程可以同时运行这部分

threadLock = threading.Lock()
#获取锁,对下面代码进行锁定,保持线程同步
threadLock.acquire()
#释放锁,解除上方代码的锁定,让其他进程进入
threadLock.release()

三、多线程优先级队列:

Queue模块允许你创建一个新的队列对象,以盛放一定数量的项目

控制Queue有以下方法:

  • get():从队列移除一个项目并返回它
  • put():把项目放入队列
  • qsize():返回当前队列中项目的数量
  • empty():如果队列为空,返回True,反之为False
  • full():如果队列满了返回True,反之为False

Python多线程学习教程相关推荐

  1. 字字谏言!Python入门学习教程:关于Python不得不说的事儿

    作为程序员,你肯定遇到过这样的领导: "别人还没走,你先走了不合适吧." "不能确定功劳,总得有苦劳吧!你看别人9点谁走了?" 说到996,这很有可能是诱因之一 ...

  2. python小老鼠编程_成都python函数学习教程,Python编写课程

    1.urllib2/urllib实现urllib2和urllib是Python中的两个内置模块,要实现HTTP功能,实现方式是以urllib2为主,urllib为辅.1.1首先实现一个完整的请求与响应 ...

  3. Python编程学习教程:用python给自己DIY一款小说阅读器

    前一段时间书荒的时候,在喜马拉雅APP发现一个主播播讲的小说-大王饶命.听起来感觉很好笑,挺有意思的,但是只有前200张是免费的,后面就要收费.一章两毛钱,本来是想要买一下,发现说的进度比较慢而且整本 ...

  4. Python简要学习教程

    Python简要学习教程 1 Python基础性质 重点:Python是一种动态的强类型语言 接下来我们分开理解动态的和强类型: 1.1 动态 静态类型(static):所有的变量类型必须被显示地声明 ...

  5. Python基础学习教程:如何用Python来写pm2.5空气质量查询程序

    今天就教大家用之前有跟大家分享过的python基础学习教程完成首个MVP,如何用CLI(command-line interface,命令行界面)来执行第一个空气质量查询程序. 知识点 如何进行txt ...

  6. Python编程学习教程:用python给自己DIY一款小说阅读器,很简单!

    前一段时间书荒的时候,在喜马拉雅APP发现一个主播播讲的小说-大王饶命.听起来感觉很好笑,挺有意思的,但是只有前200张是免费的,后面就要收费.一章两毛钱,本来是想要买一下,发现说的进度比较慢而且整本 ...

  7. Python爬虫学习教程 bilibili网站视频爬取!【附源码】

    Python爬虫学习教程,万物皆可爬!每个技术大牛都是从基础慢慢的提升上去的,基础知识越深以后的发展越牛!学好python,才能玩转python,那到底怎么才能学好python? 通过爬取b站案例带领 ...

  8. python免费自学爬虫_这套Python爬虫学习教程,不到一天即可新手到进阶!免费领...

    想用Python做爬虫,而你却还不会Python的话,那么这些入门基础知识必不可少.很多小伙伴,特别是在学校的学生,接触到爬虫之后就感觉这个好厉害的样子,我要学.但是却完全不知道从何开始,很迷茫,学的 ...

  9. Python多线程学习(上)

    最近在学习python多线程,写一下随笔就当复习了.另外强烈推荐大家看一下<Python核心编程>这本书,这本书里面可以帮你学习python进阶. 一.基本概念: 1.线程: 线程又称为轻 ...

最新文章

  1. AntD Checkbox 的三种状态处理
  2. ubuntu 13.04 gnome terminal打开默认最大化方法
  3. C语言再学习 -- 创建excel文件
  4. css-net 中华版,使用C#代码选择CSS样式(ASP.net)
  5. ribbon重试机制
  6. tomcat7 java_java开发环境配置(windows下JDK7+tomcat7)
  7. B2C网站转化率优化
  8. oracle 中的除法函数,Oracle 函数
  9. arm 嵌入式系统复习大纲
  10. spring aop切面执行顺序
  11. 一个程序猿小小的梦想-写在16年底的时候
  12. 无线安全~python实现Deauth攻击
  13. 基于华为ENSP模拟器下的多个区域互联,减少LSA的更新量,加快收敛,保障更新安全的OSPF综合练习
  14. ECHAP:身份认证的安全协议
  15. 终结拖延症——行动的理由
  16. chapter请求和响应
  17. 0.91英寸OLED初始化程序
  18. ad域推送软件_Windows域推送软件、域推送安装msi程序、域推送安装软件的方法-MSI文件...
  19. linux命令sd卡分区及格式化sd卡
  20. 量化交易都有哪些主要的策略模型?

热门文章

  1. [票据打印]打印走纸控制(1) - 设置纸型
  2. PAT甲级1065 A+B and C (64bit):[C++题解]爆long long,熟悉计算机存储有符号数原理
  3. 一个电脑能装几块固态_花了20000块给电脑升级了磁盘阵列,速度达到10G连续读写...
  4. 工商企业管理对计算机水平的要求,对工商企业管理的分析
  5. jszip压缩服务器文件,使用JSZip压缩驻留在服务器上的PDF
  6. python kafka offset自动提交_Spring-Kafka —— 实现批量消费和手动提交offset
  7. c 串转string_c++ 中 char 与 string 之间的相互转换问题
  8. java c3p0 配置文件_【c3p0】 C3P0的三种配置方式以及基本配置项详解
  9. java for循环优化_Java for循环优化
  10. 谷歌市场上架aab安装包的各种坑