Python进程和线程之多线程的使用及说明

 更新时间:2025年09月16日 09:02:18   作者:Derrick__1  
Python多线程通过threading模块实现,主线程默认运行,子线程由Thread类创建并启动,线程共享变量易引发数据混乱,需用Lock同步,但锁可能降低效率或导致死锁,(79字)

Python之多线程的使用

前面提到过进程是由很多线程组成的,那么今天廖老师就详细解释了线程是如何运行的。

首先,Python的标准库提供了两个模块:_threadthreading_thread是低级模块,threading是高级模块,对_thread进行了封装。

绝大多数情况下,我们只需要使用threading这个高级模块。

根据廖老师的例子,运行出来如此的结果。

任何 Python 程序默认都在一个主线程中运行,该线程通常名为 MainThread

threading.current_thread().name用于获取当前正在执行的线程的名称。

t = threading.Thread(target=loop, name='LoopThread')   

这里使用 threading.Thread类来创建一个线程对象 ,也就是我们所需要的支线线程

start()方法会​​启动新线程​​

这意味着 Python 会创建新的执行上下文,并​​几乎同时​​开始在新线程中执行 loop函数

重要的是,调用 start()后,主线程不会阻塞,它会继续向下执行(t.join()),而新线程 LoopThread也开始并发地执行自己的任务。

不过由于多进程中,同一个变量,各自有一份拷贝存在于每个进程中,互不影响,而多线程中,所有变量都由所有线程共享,所以,任何一个变量都可以被任何一个线程修改,因此,线程之间共享数据最大的危险在于多个线程同时改一个变量,把内容给改乱了。

我们这里会引入一个lock语句

balance = 0
lock = threading.Lock()

def run_thread(n):
    for i in range(100000):
        # 先要获取锁:
        lock.acquire()
        try:
            # 放心地改吧:
            change_it(n)
        finally:
            # 改完了一定要释放锁:
            lock.release()

创建一个锁就是通过threading.Lock()来实现。

不过这里的锁虽然可以让我们的内容不那么紊乱,但是包含锁的某段代码实际上只能以单线程模式执行,效率就大大地下降了甚至他会让多个锁在一起执行可能形成一个死锁。

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • Python文件操作及内置函数flush原理解析

    Python文件操作及内置函数flush原理解析

    这篇文章主要介绍了Python文件操作及内置函数flush原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-10-10
  • 对python中的six.moves模块的下载函数urlretrieve详解

    对python中的six.moves模块的下载函数urlretrieve详解

    今天小编就为大家分享一篇对python中的six.moves模块的下载函数urlretrieve详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-12-12
  • Python虚拟环境管理工具virtualenv详解

    Python虚拟环境管理工具virtualenv详解

    在Python开发过程中,我们常常需要管理不同项目的依赖,每个项目可能依赖不同版本的Python库,因此,如何有效管理这些库成为了开发者日常工作中不可忽视的问题,需要的朋友可以参考下
    2024-12-12
  • python如何将.tif格式图批量转化为.jpg格式图

    python如何将.tif格式图批量转化为.jpg格式图

    这篇文章主要介绍了python如何将.tif格式图批量转化为.jpg格式图问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-06-06
  • python 多进程和协程配合使用写入数据

    python 多进程和协程配合使用写入数据

    这篇文章主要介绍了python 多进程和协程配合使用写入数据,帮助大家利用python高效办公,感兴趣的朋友可以了解下
    2020-10-10
  • 在Python中操作字典之fromkeys()方法的使用

    在Python中操作字典之fromkeys()方法的使用

    这篇文章主要介绍了在Python中操作字典之fromkeys()方法的使用,是Python入门的基础知识,需要的朋友可以参考下
    2015-05-05
  • Python开发入门之如何制作一个简单的桌面应用

    Python开发入门之如何制作一个简单的桌面应用

    这篇文章主要给大家介绍了关于Python开发入门之如何制作一个简单的桌面应用的相关资料,我们不仅可以使用Python的图像处理库,如PIL等来实现图片的处理和识别,同时你还可以设计和开发具有图形界面的桌面应用程序,需要的朋友可以参考下
    2023-08-08
  • python采集博客中上传的QQ截图文件

    python采集博客中上传的QQ截图文件

    这篇文章主要介绍了python采集博客中上传的QQ截图文件,因为文件名包含中文会在某些时候乱码,例如这件的文件名QQ截图20120926174732,所以需要采集出来修改掉,需要的朋友可以参考下
    2014-07-07
  • Caffe均值文件mean.binaryproto转mean.npy的方法

    Caffe均值文件mean.binaryproto转mean.npy的方法

    今天小编就为大家分享一篇Caffe均值文件mean.binaryproto转mean.npy的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • python中in和is的区别点总结

    python中in和is的区别点总结

    在本篇文章里小编给大家整理的是一篇关于python中in和is的区别点总结,有兴趣的朋友可以跟着学习下。
    2021-05-05

最新评论