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 相关文章推荐
sqlalchemy对象转dict的示例
Apr 22 Python
Python随机生成信用卡卡号的实现方法
May 14 Python
Python中static相关知识小结
Jan 02 Python
Python面向对象基础入门之设置对象属性
Dec 11 Python
Python匿名函数及应用示例
Apr 09 Python
python aiohttp的使用详解
Jun 20 Python
微信公众号token验证失败解决方案
Jul 22 Python
Django 源码WSGI剖析过程详解
Aug 05 Python
pycharm激活码有效到2020年11月底
Sep 18 Python
TENSORFLOW变量作用域(VARIABLE SCOPE)
Jan 10 Python
python实现超级马里奥
Mar 18 Python
如何实现一个python函数装饰器(Decorator)
Oct 12 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小技巧之JS和CSS优化工具Minify的使用方法
2014/05/19 PHP
全面解读PHP的人气开发框架Laravel
2015/10/15 PHP
php网页版聊天软件实现代码
2016/08/12 PHP
详解PHP 7.4 中数组延展操作符语法知识点
2019/07/19 PHP
Javascript 判断客户端浏览器类型代码
2010/03/01 Javascript
js文件缓存之版本管理详解
2013/07/05 Javascript
Enter转换为Tab的小例子(兼容IE,Firefox)
2013/11/14 Javascript
在Linux上用forever实现Node.js项目自启动
2014/07/09 Javascript
初识Node.js
2014/09/03 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
2015/09/23 Javascript
AngularJs中Bootstrap3 datetimepicker使用实例
2016/12/13 Javascript
jquery中each循环的简单回滚操作
2017/05/05 jQuery
node.js中grunt和gulp的区别详解
2017/07/17 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
2017/10/18 Javascript
vue-router2.0 组件之间传参及获取动态参数的方法
2017/11/10 Javascript
在Vue项目中使用jsencrypt.js对数据进行加密传输的方法
2019/04/17 Javascript
React+Redux实现简单的待办事项列表ToDoList
2019/09/29 Javascript
echarts实现折线图的拖拽效果
2019/12/19 Javascript
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
Python实现list反转实例汇总
2014/11/11 Python
Python获取单个程序CPU使用情况趋势图
2015/03/10 Python
Django实现图片文字同时提交的方法
2015/05/26 Python
Python单元和文档测试实例详解
2019/04/11 Python
基于Pytorch SSD模型分析
2020/02/18 Python
python GUI库图形界面开发之PyQt5切换按钮控件QPushButton详细使用方法与实例
2020/02/28 Python
Python可以实现栈的结构吗
2020/05/27 Python
Python使用socket模块实现简单tcp通信
2020/08/18 Python
阿迪达斯香港官网:adidas香港
2019/11/09 全球购物
自动化专业个人求职信范文
2013/11/29 职场文书
学习之星事迹材料
2014/05/17 职场文书
2014年学生会个人工作总结
2014/11/07 职场文书
倡议书作文
2015/01/19 职场文书
2015年全国爱耳日活动总结
2015/02/27 职场文书
基于Java的MathML转图片的方法(示例代码)
2021/06/23 Java/Android
HTML+CSS实现导航条下拉菜单的示例代码
2021/08/02 HTML / CSS
JavaScript声明变量和数据类型的转换
2022/04/12 Javascript