Python 多线程,threading模块,创建子线程的两种方式示例

 更新时间:2019年09月29日 09:55:10   作者:houyanhua1  
这篇文章主要介绍了Python 多线程,threading模块,创建子线程的两种方式,结合实例形式分析了Python线程的原理与创建子线程的相关实现技巧,需要的朋友可以参考下

本文实例讲述了Python 多线程,threading模块,创建子线程的两种方式。分享给大家供大家参考,具体如下:

GIL(全局解释器锁)是C语言版本的Python解释器中专有的,GIL的存在让多线程的效率变低(哪个线程抢到锁,就执行哪个线程)。在IO密集型程序中,多线程依然比单线程效率高(GIL通过IO阻塞自动切换多线程)。

解决GIL(全局解释器锁)的问题的三种方法:

1、不要用C语言版本的Python解释器。
2、让子线程运行其他语言代码(例如:主线程运行Python代码,子线程运行C语言代码(C语言的动态库))。
3、多进程代替多线程(多进程可以利用多核CPU)。

创建子线程的第一种方式:

demo.py(通过函数名指定子线程的任务):

import threading
def test1():
  print("子线程运行了...")
def main():
  # 通过 target=函数名 的方式定义子线程
  t1 = threading.Thread(target=test1) # 通过target指定子线程要执行的任务。可以通过args=元组 来指定test1的参数。
  t1.start() # 只有在调用start方法后才会创建子线程并执行
  # threading.enumerate() 打印正在执行的线程,包括主线程和子线程
  print(threading.enumerate()) # [<_MainThread(MainThread, started 139724821161728)>, <Thread(Thread-1, started 139724795434752)>]
  # 当子线程没有结束时,主线程也不会结束。 当主线程结束后,所有的子线程也会结束。
if __name__ == "__main__":
  main()

运行结果:

子线程运行了...
[<_MainThread(MainThread, started 7076)>, <Thread(Thread-1, started 2832)>]

创建子线程的第二种方式:

demo.py(通过类来定义子线程):

#coding=utf-8
import threading
# 通过类定义子线程。 继承threading.Thread类
class MyThread(threading.Thread):
  # 开启子线程时,会自动执行run函数
  def run(self):
    print(self.name) # Thread-1 name属性中保存的是当前线程的名字
def main():
  t = MyThread() # 实例化自定义的子线程
  t.start() # 开启子线程
if __name__ == '__main__':
  main()

运行结果:

Thread-1

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python进程与线程操作技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》、《Python+MySQL数据库程序设计入门教程》及《Python常见数据库操作技巧汇总

希望本文所述对大家Python程序设计有所帮助。

相关文章

  • Python定时发送消息的脚本:每天跟你女朋友说晚安

    Python定时发送消息的脚本:每天跟你女朋友说晚安

    今天小编就为大家分享一篇关于Python定时发送消息的脚本:每天跟你女朋友说晚安的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-10-10
  • Python 面向对象 成员的访问约束

    Python 面向对象 成员的访问约束

    在Java,C++,以及PHP中都有对应的关键字,public,protected,private,但是在Python中却没有这些关键字来声明类成员的访问作用域。
    2008-12-12
  • 梯度下降法介绍及利用Python实现的方法示例

    梯度下降法介绍及利用Python实现的方法示例

    梯度下降算法是一个很基本的算法,在机器学习和优化中有着非常重要的作用,下面这篇文章主要给大家介绍了关于利用Python实现梯度下降法的相关资料,对大家具有一定的参考学习价值,需要的朋友们下面来一起看看吧。
    2017-07-07
  • 解决python3中自定义wsgi函数,make_server函数报错的问题

    解决python3中自定义wsgi函数,make_server函数报错的问题

    下面小编就为大家分享一篇解决python3中自定义wsgi函数,make_server函数报错的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2017-11-11
  • python logging.basicConfig不生效的原因及解决

    python logging.basicConfig不生效的原因及解决

    今天小编就为大家分享一篇python logging.basicConfig不生效的原因及解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-02-02
  • Python学习之Anaconda的使用与配置方法

    Python学习之Anaconda的使用与配置方法

    我在学习Python的爬虫框架中看到看到了anaconda的介绍,简直是相见恨晚啊,我觉的每个Python的学习网站上首先都应该使用anaconda来进行教程,因为在实践的过程中光环境的各种报错就能消磨掉你所有的学习兴趣
    2018-01-01
  • python基础知识小结之集合

    python基础知识小结之集合

    本文给大家小结了一下Python中集合的基础知识,非常的简单易懂,有需要的小伙伴可以参考下。
    2015-11-11
  • 基于python实现分析识别文章/内容中的高频词和关键词

    基于python实现分析识别文章/内容中的高频词和关键词

    要分析一篇文章的高频词和关键词,可以使用 Python 中的 nltk 库和 collections 库或者jieba库来实现,本篇文章介绍基于两种库分别实现分析内容中的高频词和关键词,需要的朋友可以参考下
    2023-09-09
  • Python实现双色球号码随机生成

    Python实现双色球号码随机生成

    和体彩大乐透类似,福彩双色球也是购买次数最多的彩种之一,相比大乐透,双色球更容易中小奖。本文将介绍 Python 实习双色球彩票自由的流程,感兴趣的可以了解一下
    2022-05-05
  • python安装完成后可以进行的后续步骤和注意事项小结

    python安装完成后可以进行的后续步骤和注意事项小结

    本文详细介绍了安装Python3后的后续步骤,包括验证安装、配置环境、安装包、创建和运行脚本,以及使用虚拟环境,还强调了注意事项,如系统更新、包管理与安全,感兴趣的朋友一起看看吧
    2025-01-01

最新评论