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 基础教程之包和类的用法
Feb 23 Python
Python协程的用法和例子详解
Sep 09 Python
浅谈flask截获所有访问及before/after_request修饰器
Jan 18 Python
Python发送http请求解析返回json的实例
Mar 26 Python
Python Numpy:找到list中的np.nan值方法
Oct 30 Python
Django继承自带user表并重写的例子
Nov 18 Python
keras tensorflow 实现在python下多进程运行
Feb 06 Python
13个Pandas实用技巧,助你提高开发效率
Aug 19 Python
python 如何使用find和find_all爬虫、找文本的实现
Oct 16 Python
Python导入父文件夹中模块并读取当前文件夹内的资源
Nov 19 Python
python 三种方法实现对Excel表格的读写
Nov 19 Python
写一个Python脚本自动爬取Bilibili小视频
Apr 24 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 has encountered an Access Violation at 7C94BD02解决方法
2009/08/24 PHP
PHP中mysqli_affected_rows作用行数返回值分析
2014/12/26 PHP
PHP获取二叉树镜像的方法
2018/01/17 PHP
Laravel 实现密码重置功能
2018/02/23 PHP
Ajax一统天下之Dojo整合篇
2007/03/24 Javascript
JavaScript中OnLoad几种使用方法
2012/12/15 Javascript
原生Js页面滚动延迟加载图片实现原理及过程
2013/06/24 Javascript
浅谈jquery.fn.extend与jquery.extend区别
2015/07/13 Javascript
基于JavaScript创建动态Dom
2015/12/08 Javascript
JavaScript函数定义方法实例详解
2019/03/05 Javascript
小程序绑定用户方案优化小结
2019/05/15 Javascript
通过循环优化 JavaScript 程序
2019/06/24 Javascript
js设置默认时间跨度过程详解
2019/07/17 Javascript
nodejs 递归拷贝、读取目录下所有文件和目录
2019/07/18 NodeJs
javascript(基于jQuery)实现鼠标获取选中的文字示例【测试可用】
2019/10/26 jQuery
JS中this的4种绑定规则详解
2020/02/04 Javascript
国内常用的js类库大全(CDN公共库)
2020/06/24 Javascript
vue项目接口管理,所有接口都在apis文件夹中统一管理操作
2020/08/13 Javascript
JavaScript中条件语句的优化技巧总结
2020/12/04 Javascript
[01:14]英雄,所敬略同——2018完美盛典宣传视频4K
2018/12/05 DOTA
[01:11:46]DOTA2-DPC中国联赛 正赛 iG vs Magma BO3 第一场 2月23日
2021/03/11 DOTA
python Spyder界面无法打开的解决方法
2018/04/27 Python
Python动态赋值的陷阱知识点总结
2019/03/17 Python
Python matplotlib画图与中文设置操作实例分析
2019/04/23 Python
python3+PyQt5 使用三种不同的简便项窗口部件显示数据的方法
2019/06/17 Python
Python爬虫爬取Bilibili弹幕过程解析
2019/10/10 Python
基于Python的接口自动化读写excel文件的方法
2021/01/15 Python
详解HTML5中的picture元素响应式处理图片
2018/01/03 HTML / CSS
美国CVS药店官网:CVS Pharmacy
2018/07/26 全球购物
投标保密承诺书
2014/05/19 职场文书
模特大赛策划方案
2014/05/28 职场文书
党员教师群众路线对照检查材料思想汇报
2014/09/29 职场文书
2014年银行信贷员工作总结
2014/12/08 职场文书
社区重阳节活动总结
2015/03/24 职场文书
干部理论学习心得体会
2016/01/21 职场文书
市场营销计划书
2019/04/24 职场文书