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中用Descriptor实现类级属性(Property)详解
Sep 18 Python
python使用in操作符时元组和数组的区别分析
May 19 Python
Python cookbook(数据结构与算法)在字典中将键映射到多个值上的方法
Feb 18 Python
django框架实现一次性上传多个文件功能示例【批量上传】
Jun 19 Python
python实现将文件夹内的每张图片批量分割成多张
Jul 22 Python
django认证系统实现自定义权限管理的方法
Aug 28 Python
使用python快速实现不同机器间文件夹共享方式
Dec 22 Python
Python GUI之tkinter窗口视窗教程大集合(推荐)
Oct 20 Python
python和C++共享内存传输图像的示例
Oct 27 Python
使用Python实现NBA球员数据查询小程序功能
Nov 09 Python
python模块内置属性概念及实例
Feb 18 Python
Python 多线程之threading 模块的使用
Apr 14 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程序
2006/10/09 PHP
基于mysql的论坛(4)
2006/10/09 PHP
实现 win2003 下 mysql 数据库每天自动备份
2006/12/06 PHP
PHP 根据IP地址控制访问的代码
2010/04/22 PHP
PHP读取PDF内容配合Xpdf的使用
2012/11/24 PHP
php cli模式下获取参数的方法
2017/05/05 PHP
JQuery读取XML文件数据并显示的实现代码
2009/12/16 Javascript
浅说js变量
2011/05/25 Javascript
用js实现小球的自由移动代码
2013/04/22 Javascript
javascript实现鼠标移到Image上方时显示文字效果的方法
2015/08/07 Javascript
jquery validate和jquery form 插件组合实现验证表单后AJAX提交
2015/08/26 Javascript
深入浅析JS Function()构造函数
2016/08/22 Javascript
轻松掌握JavaScript享元模式
2016/08/27 Javascript
JS编写函数实现对身份证号码最后一位的验证功能
2016/12/29 Javascript
js实现导航栏中英文切换效果
2017/01/16 Javascript
微信小程序 引入es6 promise
2017/04/12 Javascript
angular中子控制器向父控制器传值的实例
2018/10/08 Javascript
vue学习笔记五:在vue项目里面使用引入公共方法详解
2019/04/04 Javascript
使用vue-router切换页面时,获取上一页url以及当前页面url的方法
2019/05/06 Javascript
vue 使用原生组件上传图片的实例
2020/09/08 Javascript
解决新建一个vue项目过程中遇到的问题
2020/10/22 Javascript
通过vue.extend实现消息提示弹框的方法记录
2021/01/07 Vue.js
在Python的gevent框架下执行异步的Solr查询的教程
2015/04/16 Python
详解python中的json的基本使用方法
2016/12/21 Python
python实现单链表中删除倒数第K个节点的方法
2018/09/28 Python
pycharm 设置项目的根目录教程
2020/02/12 Python
Python3连接Mysql8.0遇到的问题及处理步骤
2020/02/17 Python
香港彩色隐形眼镜在线商店:Stunninglens(全球免费送货)
2019/05/10 全球购物
英国领先的互联网葡萄酒礼品商:Vintage Wine & Port
2019/05/24 全球购物
教师个人的自我评价分享
2014/01/02 职场文书
农村婚礼证婚词
2014/01/08 职场文书
全国优秀辅导员事迹材料
2014/05/14 职场文书
2014年党风建设工作总结
2014/11/19 职场文书
公司前台接待岗位职责
2015/04/03 职场文书
2015年预算员工作总结
2015/05/14 职场文书
运动会100米广播稿
2015/08/19 职场文书