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实现的抓取腾讯视频所有电影的爬虫
Apr 22 Python
Python面向对象编程中关于类和方法的学习笔记
Jun 30 Python
itchat和matplotlib的结合使用爬取微信信息的实例
Aug 25 Python
Django中STATIC_ROOT和STATIC_URL及STATICFILES_DIRS浅析
May 08 Python
python numpy实现文件存取的示例代码
May 26 Python
Python3 翻转二叉树的实现
Sep 30 Python
Python基础之变量基本用法与进阶详解
Jan 03 Python
对Tensorflow中tensorboard日志的生成与显示详解
Feb 04 Python
Python格式化输出--%s,%d,%f的代码解析
Apr 29 Python
详解Python中的Lock和Rlock
Jan 26 Python
python Autopep8实现按PEP8风格自动排版Python代码
Mar 02 Python
Pytorch中expand()的使用(扩展某个维度)
Jul 15 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 xml留言板 xml存储数据的简单例子
2009/08/24 PHP
Ubuntu12下编译安装PHP5.3开发环境
2015/03/27 PHP
php 问卷调查结果统计
2015/10/08 PHP
PHP5.2中PDO的简单使用方法
2016/03/25 PHP
javascript学习笔记之函数定义
2015/06/25 Javascript
jQuery左右滚动支持图片放大缩略图图片轮播代码分享
2015/08/26 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
2015/11/24 Javascript
Bootstrap富文本组件wysiwyg数据保存到mysql的方法
2016/05/09 Javascript
Javascript中indexOf()和lastIndexOf应用方法实例
2016/08/24 Javascript
js中编码函数:escape,encodeURI与encodeURIComponent详解
2017/03/21 Javascript
详解Angular2组件之间如何通信
2017/06/22 Javascript
Vue 使用中的小技巧
2018/04/26 Javascript
微信小程序首页的分类功能和搜索功能的实现思路及代码详解
2018/09/11 Javascript
vue 音乐App QQ音乐搜索列表最新接口跨域设置方法
2018/09/25 Javascript
vue发送ajax请求详解
2018/10/09 Javascript
详解create-react-app 2.0版本如何启用装饰器语法
2018/10/23 Javascript
浅谈vux之x-input使用以及源码解读
2018/11/04 Javascript
koa2使用ejs和nunjucks作为模板引擎的使用
2018/11/27 Javascript
推荐几个不错的console调试技巧实现
2019/12/20 Javascript
Vue实现兄弟组件间的联动效果
2020/01/21 Javascript
vue2.x数组劫持原理的实现
2020/04/19 Javascript
CentOS 6.X系统下升级Python2.6到Python2.7 的方法
2016/10/12 Python
基于Django模板中的数字自增(详解)
2017/09/05 Python
Python3中类、模块、错误与异常、文件的简易教程
2017/11/20 Python
详解Python logging调用Logger.info方法的处理过程
2019/02/12 Python
python3图片文件批量重命名处理
2019/10/31 Python
Python3搭建http服务器的实现代码
2020/02/11 Python
css3新增颜色表示方式分享
2014/04/15 HTML / CSS
html5音频_动力节点Java学院整理
2018/08/22 HTML / CSS
Servlet如何得到客户端机器的信息
2014/10/17 面试题
艺术专业大学生自我评价
2013/09/22 职场文书
建筑行业的大学生自我评价
2013/12/08 职场文书
税务会计岗位职责
2014/02/18 职场文书
高中军训感言500字
2014/02/24 职场文书
《老山界》教学反思
2014/04/08 职场文书
2019幼儿园感恩节活动策划书
2019/11/28 职场文书