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的Tornado框架实现数据可视化的教程
May 02 Python
Python实现对象转换为xml的方法示例
Jun 08 Python
Python的多维空数组赋值方法
Apr 13 Python
Python3.5 + sklearn利用SVM自动识别字母验证码方法示例
May 10 Python
新手入门Python编程的8个实用建议
Jul 12 Python
简单了解django处理跨域请求最佳解决方案
Mar 25 Python
python实现IOU计算案例
Apr 12 Python
解决python执行较大excel文件openpyxl慢问题
May 15 Python
Python使用shutil模块实现文件拷贝
Jul 31 Python
pandas apply多线程实现代码
Aug 17 Python
python和node.js生成当前时间戳的示例
Sep 29 Python
python爬虫智能翻页批量下载文件的实例详解
Feb 02 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读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
Zend Framework入门教程之Zend_Config组件用法详解
2016/12/09 PHP
源码分析 Laravel 重复执行同一个队列任务的原因
2017/12/25 PHP
JavaScript 异步调用框架 (Part 2 - 用例设计)
2009/08/03 Javascript
jquery引用方法时传递参数原理分析
2014/10/13 Javascript
zepto.js中tap事件阻止冒泡的实现方法
2015/02/12 Javascript
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
JS选项卡动态替换banner图片路径的方法
2015/05/11 Javascript
jQuery实现自动与手动切换的滚动新闻特效代码分享
2015/08/27 Javascript
javascript生成随机数方法汇总
2015/11/12 Javascript
jQuery的框架介绍
2016/05/11 Javascript
js 截取或者替换字符串中的数字实现方法
2016/06/13 Javascript
使用UrlConnection实现后台模拟http请求的简单实例
2017/01/04 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
微信小程序 支付后台java实现实例
2017/05/09 Javascript
JS奇技之利用scroll来监听resize详解
2017/06/15 Javascript
JS实现加载时锁定HTML页面元素的方法
2017/06/24 Javascript
vue.js项目打包上线的图文教程
2017/11/16 Javascript
用图片替换checkbox原始样式并实现同样的功能
2018/11/15 Javascript
基于Layui自定义模块的使用方法详解
2019/09/14 Javascript
手把手15分钟搭一个企业级脚手架
2019/09/16 Javascript
JavaScript使用canvas绘制随机验证码
2020/02/17 Javascript
python错误处理详解
2014/09/28 Python
Python ftp上传文件
2016/02/13 Python
Python+tkinter使用40行代码实现计算器功能
2018/01/30 Python
python实现停车管理系统
2018/11/30 Python
python使用pipeline批量读写redis的方法
2019/02/18 Python
python django框架中使用FastDFS分布式文件系统的安装方法
2019/06/10 Python
Python实现名片管理系统
2020/02/14 Python
HTML5混合开发二维码扫描以及调用本地摄像头
2017/12/27 HTML / CSS
HTML5 Canvas绘制圆点虚线实例
2015/01/01 HTML / CSS
New Balance英国官方网站:始于1906年,百年慢跑品牌
2016/12/07 全球购物
Otticanet美国:最顶尖的世界名牌眼镜, 能得到打折季的价格
2019/03/10 全球购物
金融专业个人求职信范文
2013/11/28 职场文书
建筑人员岗位职责
2013/12/25 职场文书
小升初自荐信怎么写
2015/03/26 职场文书