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使用webbrowser浏览指定url的方法
Apr 04 Python
Python的Django框架中forms表单类的使用方法详解
Jun 21 Python
Queue 实现生产者消费者模型(实例讲解)
Nov 13 Python
Python返回数组/List长度的实例
Jun 23 Python
对Python中list的倒序索引和切片实例讲解
Nov 15 Python
pyqt5利用pyqtDesigner实现登录界面
Mar 28 Python
关于pycharm中pip版本10.0无法使用的解决办法
Oct 10 Python
python和pywin32实现窗口查找、遍历和点击的示例代码
Apr 01 Python
解决python中0x80072ee2错误的方法
Jul 19 Python
Python Request类源码实现方法及原理解析
Aug 17 Python
Python基于locals返回作用域字典
Oct 17 Python
pycharm中leetcode插件使用图文详解
Dec 07 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开发中的中文编码问题
2013/08/08 PHP
php读取远程gzip压缩网页的方法
2014/12/29 PHP
php集成套件服务器xampp安装使用教程(适合第一次玩PHP的新手)
2015/06/03 PHP
php使用Session和文件统计在线人数
2015/07/04 PHP
PHP 输出缓冲控制(Output Control)详解
2016/08/25 PHP
laravel5.2实现区分前后台用户登录的方法
2017/01/11 PHP
javascript基础的动画教程,直观易懂
2007/01/10 Javascript
JavaScript 私有成员分析
2009/01/13 Javascript
js的表单操作 简单计算器
2011/12/29 Javascript
浅谈javascript中的作用域
2012/04/07 Javascript
关于js遍历表格的实例
2013/07/10 Javascript
javascript实现英文首字母大写
2015/04/23 Javascript
jQuery1.9+中删除了live以后的替代方法
2016/06/17 Javascript
JS实现的简单拖拽功能示例
2017/03/13 Javascript
JS+HTML5实现图片在线预览功能
2017/07/22 Javascript
AngularJS 将再发布一个重要版本 然后进入长期支持阶段
2018/01/31 Javascript
Vue.js 实现微信公众号菜单编辑器功能(一)
2018/05/08 Javascript
VsCode与Node.js知识点详解
2019/09/05 Javascript
使用 Angular RouteReuseStrategy 缓存(路由)组件的实例代码
2019/11/01 Javascript
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
JS时间戳与日期格式互相转换的简单方法示例
2021/01/30 Javascript
分享一个简单的python读写文件脚本
2017/11/25 Python
python单向链表的基本实现与使用方法【定义、遍历、添加、删除、查找等】
2019/10/24 Python
Python基于pillow库实现生成图片水印
2020/09/14 Python
Python虚拟环境virtualenv创建及使用过程图解
2020/12/08 Python
用gpu训练好的神经网络,用tensorflow-cpu跑出错的原因及解决方案
2021/03/03 Python
美国知名的在线旅游服务网站:Priceline
2016/07/23 全球购物
爱奇艺VIP会员:大剧抢先看
2018/07/11 全球购物
博士学位自我鉴定范文
2013/12/26 职场文书
新颖的化妆品活动方案
2014/08/21 职场文书
检察机关个人对照检查材料
2014/09/15 职场文书
个人总结怎么写
2015/02/26 职场文书
python 实现的截屏工具
2021/05/08 Python
Python中第三方库Faker的使用详解
2022/04/02 Python
Java 数组的使用
2022/05/11 Java/Android
JS实现简单的九宫格抽奖
2022/06/28 Javascript