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的爬虫程序编写框架Scrapy入门学习教程
Jul 02 Python
Python 出现错误TypeError: ‘NoneType’ object is not iterable解决办法
Jan 12 Python
PyQt5每天必学之日历控件QCalendarWidget
Apr 19 Python
python实现对文件中图片生成带标签的txt文件方法
Apr 27 Python
python 将数据保存为excel的xls格式(实例讲解)
May 03 Python
Python基于property实现类的特性操作示例
Jun 15 Python
详解Python中的正则表达式
Jul 08 Python
python 字典修改键(key)的几种方法
Aug 10 Python
Python计算时间间隔(精确到微妙)的代码实例
Feb 26 Python
Python3.5运算符操作实例详解
Apr 25 Python
Flask框架学习笔记之表单基础介绍与表单提交方式
Aug 12 Python
Python内置函数property()如何使用
Sep 01 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环境配置 php5 MySQL5 apache2 phpmyadmin安装与配置图文教程
2007/03/16 PHP
仿dedecms下拉分页样式修改的thinkphp分页类实例
2014/10/30 PHP
php遍历树的常用方法汇总
2015/06/18 PHP
php实现随机生成易于记忆的密码
2015/06/19 PHP
php常用数组array函数实例总结【赋值,拆分,合并,计算,添加,删除,查询,判断,排序】
2016/12/07 PHP
PHP实现在对象之外访问其私有属性private及保护属性protected的方法
2017/11/20 PHP
Javascript模板技术
2007/04/27 Javascript
jQuery对象和DOM对象相互转化
2009/04/24 Javascript
ASP.NET jQuery 实例14 在ASP.NET form中校验时间范围
2012/02/03 Javascript
javascript定义变量时加var与不加var的区别
2014/12/22 Javascript
jQuery使用load()方法载入另外一个网页文件内的指定标签内容到div标签的方法
2015/03/25 Javascript
js闭包引起的事件注册问题介绍
2016/03/29 Javascript
三种带箭头提示框总结实例
2016/06/14 Javascript
用js实现博客打赏功能
2016/10/24 Javascript
easyui取消表单实时验证,提交时统一验证的简单实例
2016/11/07 Javascript
jQuery实现背景滑动菜单
2016/12/02 Javascript
使用Vue自定义指令实现Select组件
2018/05/24 Javascript
Vue-Cli 3.0 中配置高德地图的两种方式
2019/06/19 Javascript
vue中改变滚动条样式的方法
2020/03/03 Javascript
JavaScript实现栈结构Stack过程详解
2020/03/07 Javascript
[07:08]2014DOTA2西雅图国际邀请赛 小组赛7月11日TOPPLAY
2014/07/11 DOTA
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
Python操作Excel之xlsx文件
2017/03/24 Python
python3使用requests模块爬取页面内容的实战演练
2017/09/25 Python
Python实现简单遗传算法(SGA)
2018/01/29 Python
pytorch + visdom 处理简单分类问题的示例
2018/06/04 Python
从请求到响应过程中django都做了哪些处理
2018/08/01 Python
解决pycharm 工具栏Tool中找不到Run manager.py Task的问题
2019/07/01 Python
联想加拿大官方网站:Lenovo Canada
2018/04/05 全球购物
alice McCALL官网:澳大利亚时尚品牌
2020/11/16 全球购物
戴森香港官方网站:Dyson香港
2021/02/11 全球购物
软件专业毕业生个人自我鉴定
2014/04/17 职场文书
团队精神口号
2014/06/06 职场文书
惊涛骇浪观后感
2015/06/05 职场文书
2015年社区消防安全工作总结
2015/10/14 职场文书
读《瓦尔登湖》有感:每个人都需要一个瓦尔登湖
2019/10/17 职场文书