当前位置:首页 教程 编程教程
全部
系统教程
软件教程
CMS教程
编程教程

软件简介
去评论 去报错

什么是多线程:

所有的线程都运行在同一个进程当中,共享相同的运行环境。线程有开始、顺序执行和结束三个部分, 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。

由于单线程效率低,程序中往往要引入多线程编程。计算机的核心是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()  # 多线程


下一篇:{pboot:if('/biancheng/pyqt6_system_hotkey.html'=='javascript:;')}pyqt5,6之图形界面填坑之注册全局快捷键实现主窗口隐藏显示切换遇到的问题{else}pyqt5,6之图形界面填坑之注册全局快捷键实现主窗口隐藏显示切换遇到的问题{/pboot:if}

下载地址

普通下载

点击直接低速下载,因需宽带成本高速下载需扫码

本地低速下载

网盘下载

通过不限速阿里、蓝奏网盘高速下载(部分需要扫码)

站长声明:

1、本站资源仅供个人学习交流,请于下载后 24 小时内删除,不允许用于商业用途,否则法律问题自行承担。

2、如遇到资源无法下载请 点击报错,我们将尽快纠错。

3、如有侵犯您的版权,请联系我们,我们会尽快处理,并诚恳的向你道歉!

注意:如.zip压缩包无法打开请将后缀修改成.exe或使用其它压缩软件尝试。

文章评论

用户头像
匿名网友
发表评论
昵称

评论记录:

未查询到任何数据!

热门软件

PHP从入门到精通(第3版) 免费PDF电子书下载

《php从入门到精通(第3版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用PHP进行网络开发应该掌握的各方面技术。

推荐!《Web编程基础:HTML5、CSS3、JavaScript (第2版)》完整版PDF下载免费看

《Web编程基础:HTML5、CSS3、JavaScript (第2版)》可以免费下载PDF电子书。通过电子书的形式,读者可以在计算机、平板电脑、手机等设备上自由阅读,节省纸质书籍的成本。

PHP+MySQL动态网站开发从入门到精通.pdf

《PHP+MySQL动态网站开发从入门到精通》是张工厂所著的一本详细介绍如何使用PHP和MySQL进行动态网站开发的书籍。本书从入门到精通,适合初、中级Web开发人员阅读。本书不仅介绍了PHP和MySQL的基础知识,还

数据采集不可或缺的技巧:Python3 requests使用代理IP请求网络数据源码分享

本文讲述了如何使用Python爬虫中的代理IP,以及获取代理IP的方法。注意代理IP的稳定性与可用性,并设置合适的参数提高成功率。

《JavaScript和jQuery实战手册 原书第2版》 前端开发教程PDF免费下载

《JavaScript和jQuery实战手册(原书第2版)》第1版不仅在市场上取得了良好的销售成绩,而且获得了读者好的口碑,在JavaScript编程领域独树一帜!第2版结合JavaScript和jQuery新技术

猜你想看

《Selenium 2自动化测试实战 基于Python语言》 带索引书签目录PDF电子书 下载

本书分为12个章节,第1章是自动化测试相关基础知识的介绍;第2章到第10章是本书的重点,循序渐进地介绍了自动化测试所用到的技术;第11章通过一个具体的项目综合运用了前面章节所介绍的技术与技巧

PHP与MySQL动态网站开发免费PDF电子书下载

《PHP与MySQL动态网站开发(第4版)》适用于Web应用开发人员,适合初、中层次读者

Python进阶教程《Intermediate Python》中文译本电子书下载

《Python进阶》是《Intermediate Python》的中文译本, 谨以此献给进击的 Python 和 Python 程序员们!

推荐!《Web编程基础:HTML5、CSS3、JavaScript (第2版)》完整版PDF下载免费看

《Web编程基础:HTML5、CSS3、JavaScript (第2版)》可以免费下载PDF电子书。通过电子书的形式,读者可以在计算机、平板电脑、手机等设备上自由阅读,节省纸质书籍的成本。

Python参考手册(第4版·修订版)Python核心编程精选PDF下载

Python编程语言的杰出参考手册,书中详尽讲解了Python核心和Python库中重要的部分。全书分为三个部分,***分涉及类型与对象,运算符与表达式,程序结构与控制流

PHP从入门到精通(第3版) 免费PDF电子书下载

《php从入门到精通(第3版)》从初学者角度出发,通过通俗易懂的语言、丰富多彩的实例,详细介绍了使用PHP进行网络开发应该掌握的各方面技术。

易语言调用rasdial函数实现宽带连接(附源码下载)

做网络项目经常会用到adsl拨号或拨号VPS来更换ip,每次都必须点击 【宽带连接】一下进行断开和连接。

数据采集不可或缺的技巧:Python3 requests使用代理IP请求网络数据源码分享

本文讲述了如何使用Python爬虫中的代理IP,以及获取代理IP的方法。注意代理IP的稳定性与可用性,并设置合适的参数提高成功率。

最新标签