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


Posted in Python onSeptember 29, 2019

本文实例讲述了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 Tkinter简单布局实例教程
Sep 03 Python
Python简单进程锁代码实例
Apr 27 Python
Python 加密的实例详解
Oct 09 Python
python psutil库安装教程
Mar 19 Python
python批量读取txt文件为DataFrame的方法
Apr 03 Python
python中的插值 scipy-interp的实现代码
Jul 23 Python
Python os.access()用法实例
Feb 18 Python
PyQt5实现暗黑风格的计时器
Jul 29 Python
命令行运行Python脚本时传入参数的三种方式详解
Oct 11 Python
PyTorch中Tensor的数据统计示例
Feb 17 Python
Selenium获取登录Cookies并添加Cookies自动登录的方法
Dec 04 Python
python基于opencv实现人脸识别
Jan 04 Python
Python 继承,重写,super()调用父类方法操作示例
Sep 29 #Python
Python 类的私有属性和私有方法实例分析
Sep 29 #Python
Django REST Framework之频率限制的使用
Sep 29 #Python
基于Python实现大文件分割和命名脚本过程解析
Sep 29 #Python
Python2比较当前图片跟图库哪个图片相似的方法示例
Sep 28 #Python
python使用opencv实现马赛克效果示例
Sep 28 #Python
python打包成so文件过程解析
Sep 28 #Python
You might like
PHP Smarty生成EXCEL文档的代码
2008/08/23 PHP
深入file_get_contents函数抓取内容失败的原因分析
2013/06/25 PHP
docker-compose部署php项目实例详解
2019/07/30 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
js实现翻页后保持checkbox选中状态的实现方法
2012/11/03 Javascript
jQuery 1.9移除了$.browser可以使用$.support来替代
2014/09/03 Javascript
JavaScript中的Math.sin()方法使用详解
2015/06/15 Javascript
判断输入的字符串是否是日期格式的简单方法
2016/07/11 Javascript
JavaScript中匿名函数的递归调用
2017/01/22 Javascript
Angular+Bootstrap+Spring Boot实现分页功能实例代码
2017/07/21 Javascript
bootstrap table实现双击可编辑、添加、删除行功能
2017/09/27 Javascript
JavaScript对象的特性与实践应用深入详解
2018/12/30 Javascript
[52:07]完美世界DOTA2联赛PWL S3 LBZS vs access 第二场 12.10
2020/12/13 DOTA
Python编程实现两个文件夹里文件的对比功能示例【包含内容的对比】
2017/06/20 Python
python 数据的清理行为实例详解
2017/07/12 Python
酷! 程序员用Python带你玩转冲顶大会
2018/01/17 Python
Python把csv数据写入list和字典类型的变量脚本方法
2018/06/15 Python
pyqt5对用qt designer设计的窗体实现弹出子窗口的示例
2019/06/19 Python
python super的使用方法及实例详解
2019/09/25 Python
virtualenv介绍及简明教程
2020/06/23 Python
selenium框架中driver.close()和driver.quit()关闭浏览器
2020/12/08 Python
解决pip安装tensorflow中出现的no module named tensorflow.python 问题方法
2021/02/20 Python
html5 postMessage前端跨域并前端监听的方法示例
2018/11/01 HTML / CSS
HTML5开发动态音频图的实现
2020/07/02 HTML / CSS
Champion官网:美国冠军运动服装
2017/01/25 全球购物
阿联酋电子产品购物网站:Menakart
2017/09/15 全球购物
Vans荷兰官方网站:美国南加州的原创极限运动潮牌
2018/01/23 全球购物
毕业证丢失证明
2014/01/15 职场文书
计算机专业职业生涯规划范文
2014/01/19 职场文书
社区学雷锋活动策划方案
2014/01/30 职场文书
优秀学生评语大全
2014/04/25 职场文书
横空出世观后感
2015/06/09 职场文书
2016年党支部公开承诺书
2016/03/25 职场文书
python 实现图与图之间的间距调整subplots_adjust
2021/05/21 Python
nginx部署多前端项目的几种方法
2021/05/25 Servers
详解CSS3.0(Cascading Style Sheet) 层叠级联样式表
2021/07/16 HTML / CSS