
通过一个简单例子演示Python3多线程是什么
软件简介
去评论
去报错
什么是多线程:
所有的线程都运行在同一个进程当中,共享相同的运行环境。线程有开始、顺序执行和结束三个部分, 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。
由于单线程效率低,程序中往往要引入多线程编程。计算机的核心是CPU,它承担了所有的计算任务,它就像一座工厂,时刻运行着。假定工厂的电力有限,一次只能供给一个车间使用。也就是说,一个车间开工的时候,其他车间都必须停工。背后的含义就是,单个CPU一次只能运行一个任务。
进程就好比工厂的车间,它代表CPU所能处理的单个任务。任一时刻,CPU总是运行一个进程,其他进程处于非运行状态。一个车间里,可以有很多工人。他们协同完成一个任务。线程就好比车间里的工人,一个进程可以包括多个线程。
在Python3中实现的大部分运行任务里,不同的线程实际上并没有同时运行:它们只是看起来像是同时运行的。
大家很容易认为线程化是在程序上运行两个(或多个)不同的处理器,每个处理器同时执行一个独立的任务。这种理解并不完全正确,线程可能会在不同的处理器上运行,但一次只能运行一个线程。
同时执行多个任务需要使用非标准的Python运行方式:用不同的语言编写一部分代码,或者使用多进程模块multiprocessing,但这么做会带来一些额外的开销。
由于Python默认的运行环境是CPython(C语言开发的Python),所以线程化可能不会提升所有任务的运行速度。这是因为和GIL(Global Interpreter Lock)的交互形成了限制:一次只能运行一个Python线程。
线程化的一般替代方法是:让各项任务花费大量时间等待外部事件。但问题是,如果想缩短等待时间,会需要大量的CPU计算,结果是程序的运行速度可能并不会提升。
当代码是用Python语言编写并在默认执行环境CPython上运行时,会出现这种情况。如果线程代码是用C语言写的,那它们就能够释放GIL并同时运行。如果是在别的Python执行环境(如IPython, PyPy,Jython, IronPython)上运行,请参考相关文档了解它们是如何处理线程的。
如果只用Python语言在默认的Python执行环境下运行,并且遇到CPU受限的问题,那就应该用多进程模块multiprocessing来解决。
Python的标准库提供了两个模块:_thread和threading,_thread是低级模块,threading是高级模块,对_thread进行了封装。绝大多数情况下,我们只需要使用threading这个高级模块。
代码演示:
import time,random from multiprocessing.dummy import Pool as ThreadPool from multiprocessing import cpu_count def aJob(arg): """ 提供给多线程调用 """ print(arg) import threading t = threading.current_thread() print(" 开始当前线程名称为:" + t.getName() + "n") time.sleep(random.randint(0, 10)) print("结束当前线程名称为:" + t.getName() + "n ") gigi_log("1") def multiThread(): """ 多线程任务执行 """ cnt_cpu = cpu_count() print("------------------------------------cnt_cpu",cnt_cpu) cpus = 1 # 线程池大小 print("------------------------------------cnt_cpu", cpus) pool = ThreadPool(cpus) _lstParam = range(0, 10) pool.map(aJob, _lstParam) pool.close() pool.join() print("多线程作业已完成") if __name__ == "__main__": multiThread() # 多线程
下载地址
普通下载
点击直接低速下载,因需宽带成本高速下载需扫码
网盘下载
通过不限速阿里、蓝奏网盘高速下载(部分需要扫码)
站长声明:
1、本站资源仅供个人学习交流,请于下载后 24 小时内删除,不允许用于商业用途,否则法律问题自行承担。
2、如遇到资源无法下载请 点击报错,我们将尽快纠错。
3、如有侵犯您的版权,请联系我们,我们会尽快处理,并诚恳的向你道歉!
注意:如.zip压缩包无法打开请将后缀修改成.exe或使用其它压缩软件尝试。
热门软件
pyqt5,6之图形界面填坑之注册全局快捷键实现主窗口隐藏显示切换遇到的问题
详细介绍pyqt5、6图形界面开发时通过注册全局快捷键实现主窗口隐藏显示切换的方法及遇到的问题及问题的解决方法。
web开发教程 PHP、MySQL与JavaScript学习手册 第4版 免费PDF电子书下载
《PHP、MySQL与JavaScript学习手册 第4版》是一个适用于PHP及Web开发初学者的入门教材。本书全面深入探讨了PHP和MySQL以及Javascript语言的学习指南,旨在让读者能够轻松上手基础Web应用程序开发和编程技术
Python面向对象编程指南 Steven F. Lott(洛特)pdf扫描版免费下载
本书致力于深入讲解Python语言的高级特性,通过丰富、强大的代码示例为读者循序渐进地讲解如何编写高质量的Python代码。本书可谓是成就Python编程高手的必读之选。
PyQt5快速开发与实战电子书(清晰有目录书签无水印)高清pdf免费下载
本书既是介绍PyQt5的快速入门书籍,也是介绍PyQt5实战应用的书籍。PyQt5是对Qt所有类的Python封装,即可以利用Qt的强大功能,也可以利用Python丰富的生态,同时能够结合Python简洁的语法进行操作,其结果就是使用PyQt5可以高效简单地开发出自己想要的程序
PHP从入门到精通(第3版) 免费PDF电子书下载
《php从入门到精通(第3版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用PHP进行网络开发应该掌握的各方面技术。
猜你想看
Web前端开发HTML5/CSS3/jQuery/AJAX从学到用完美实践 PDF完整版下载
《Web前端开发HTML5/CSS3/jQuery/AJAX从学到用完美实践》是一本全面介绍Web前端开发技术的书籍,涵盖了HTML5、CSS3、jQuery和AJAX等技术,旨在帮助读者从学到用,提高Web前端开发实践能力。
Python进阶教程《Intermediate Python》中文译本电子书下载
《Python进阶》是《Intermediate Python》的中文译本, 谨以此献给进击的 Python 和 Python 程序员们!
Python面向对象编程指南 Steven F. Lott(洛特)pdf扫描版免费下载
本书致力于深入讲解Python语言的高级特性,通过丰富、强大的代码示例为读者循序渐进地讲解如何编写高质量的Python代码。本书可谓是成就Python编程高手的必读之选。
PyQt5快速开发与实战电子书(清晰有目录书签无水印)高清pdf免费下载
本书既是介绍PyQt5的快速入门书籍,也是介绍PyQt5实战应用的书籍。PyQt5是对Qt所有类的Python封装,即可以利用Qt的强大功能,也可以利用Python丰富的生态,同时能够结合Python简洁的语法进行操作,其结果就是使用PyQt5可以高效简单地开发出自己想要的程序
个人网站接入支付宝当面付php源码,可用来打赏收款或做要饭网站
本文实例为大家分享了PHP支付宝当面付2.0代码,个人网站怎么接入支付宝当面付|php支付宝当面付打赏源码
PHP&MySQL跨设备网站开发实例精粹PDF免费下载
《PHP & MySQL跨设备网站开发实例精粹》从易学实用的角度详细讲解PHP、HTML5语法,MySQL数据□□取;针对网页之间的信息传递、表单的后端处理、HTTP Header、Cookie、Session、文件存取
易语言调用rasdial函数实现宽带连接(附源码下载)
做网络项目经常会用到adsl拨号或拨号VPS来更换ip,每次都必须点击 【宽带连接】一下进行断开和连接。
ThinkPHP5快速入门PDF电子书免费下载
ThinkPHP V5.0快速入门系列是学习和掌握ThinkPHP5.0不可多得的入门指引教程,针对新手用户由浅入深给出了详尽的使用。 本系列围绕WEB开发和API开发常用的一系列基础功能进行循序渐进的讲解
文章评论