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 getopt 参数处理小示例
Jun 09 Python
Django中实现点击图片链接强制直接下载的方法
May 14 Python
简单介绍Python的Django框架的dj-scaffold项目
May 30 Python
利用python模拟实现POST请求提交图片的方法
Jul 25 Python
python对日志进行处理的实例代码
Oct 06 Python
python 通过SSHTunnelForwarder隧道连接redis的方法
Feb 19 Python
python django生成迁移文件的实例
Aug 31 Python
Python切图九宫格的实现方法
Oct 10 Python
python 利用已有Ner模型进行数据清洗合并代码
Dec 24 Python
Python SQLAlchemy库的使用方法
Oct 13 Python
Python模拟登录requests.Session应用详解
Nov 17 Python
Python中OpenCV实现查找轮廓的实例
Jun 08 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
星际玩家的三大定律
2020/03/04 星际争霸
DC这些乐高系列动画电影你看过几部?
2020/04/09 欧美动漫
PHP中单引号与双引号的区别分析
2014/08/19 PHP
thinkphp框架下实现登录、注册、找回密码功能
2016/04/06 PHP
PHP搭建大文件切割分块上传功能示例
2017/01/04 PHP
javascript数组使用调用方法汇总
2007/12/08 Javascript
两个JavaScript jsFiddle JSBin在线调试器
2010/03/14 Javascript
javascript中的作用域scope介绍
2010/12/28 Javascript
Javascript获取表单名称(name)的方法
2015/04/02 Javascript
在Javascript中处理数组之toSource()方法的使用
2015/06/09 Javascript
JavaScript实现快速排序的方法
2015/07/31 Javascript
在JavaScript的jQuery库中操作AJAX的方法讲解
2015/08/15 Javascript
JS实现带提示的星级评分效果完整实例
2015/10/30 Javascript
jQuery实现页面顶部下拉广告
2016/12/30 Javascript
详解webpack打包时排除其中一个css、js文件或单独打包一个css、js文件(两种方法)
2018/10/26 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
vuex(vue状态管理)的特殊应用案例分享
2020/03/03 Javascript
nodejs中内置模块fs,path常见的用法说明
2020/11/07 NodeJs
python进阶教程之函数对象(函数也是对象)
2014/08/30 Python
python使用BeautifulSoup分页网页中超链接的方法
2015/04/04 Python
Python动刷新抢12306火车票的代码(附源码)
2018/01/24 Python
python操作oracle的完整教程分享
2018/01/30 Python
Python中pillow知识点学习
2018/04/30 Python
python操作excel让工作自动化
2019/08/09 Python
Pycharm github配置实现过程图解
2020/10/13 Python
使用Html5 Stream开发实时监控系统
2020/06/02 HTML / CSS
英国的知名精品百货公司:House of Fraser(福来德)
2016/08/14 全球购物
加拿大最大的五金、家居装修和园艺产品商店:RONA
2017/01/27 全球购物
蔻驰意大利官网:COACH意大利
2019/01/16 全球购物
修理厂厂长岗位职责
2014/01/30 职场文书
文明之星事迹材料
2014/05/09 职场文书
群众路线对照检查材料思想汇报怎么写
2014/09/18 职场文书
2014年质检工作总结
2014/11/26 职场文书
工程部文员岗位职责
2015/02/04 职场文书
《曾国藩家书》读后感——读家书,立家风
2019/08/21 职场文书
详解MindSpore自定义模型损失函数
2021/06/30 Python