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实现抓取页面上链接的简单爬虫分享
Jan 21 Python
Python定时执行之Timer用法示例
May 27 Python
Python生成随机数组的方法小结
Apr 15 Python
Python 解决中文写入Excel时抛异常的问题
May 03 Python
Python中偏函数用法示例
Jun 07 Python
详解Python爬取并下载《电影天堂》3千多部电影
Apr 26 Python
python中的单引号双引号区别知识点总结
Jun 23 Python
Django如何将URL映射到视图
Jul 29 Python
将pytorch转成longtensor的简单方法
Feb 18 Python
python实现UDP协议下的文件传输
Mar 20 Python
解决django框架model中外键不落实到数据库问题
May 20 Python
python time.strptime格式化实例详解
Feb 03 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中使用数组实现堆栈数据结构的代码
2012/02/05 PHP
php笔记之:初探PHPcms模块开发介绍
2013/04/26 PHP
CI(CodeIgniter)框架中的增删改查操作
2014/06/10 PHP
使用PHP similar text计算两个字符串相似度
2015/11/06 PHP
jquery 的 $(&quot;#id&quot;).html() 无内容的解决方法
2010/06/07 Javascript
基于mouseout和mouseover等类似事件的冒泡问题解决方法
2013/11/18 Javascript
jquery结合CSS使用validate实现漂亮的验证
2015/01/29 Javascript
NodeJS与HTML5相结合实现拖拽多个文件上传到服务器的实现方法
2016/07/26 NodeJs
jQuery轮播图效果精简版完整示例
2016/09/04 Javascript
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
小程序测试后台服务的方法(ngrok)
2019/03/08 Javascript
详解keep-alive + vuex 让缓存的页面灵活起来
2019/04/19 Javascript
一文了解Vue中的nextTick
2019/05/06 Javascript
[37:22]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第一局
2016/02/28 DOTA
python多线程扫描端口示例
2014/01/16 Python
python re模块findall()函数实例解析
2018/01/19 Python
详解python中的线程
2018/02/10 Python
Python使用re模块正则提取字符串中括号内的内容示例
2018/06/01 Python
Python中的Django基本命令实例详解
2018/07/15 Python
Python常见MongoDB数据库操作实例总结
2018/07/24 Python
Python使用PyQt5/PySide2编写一个极简的音乐播放器功能
2020/02/07 Python
基于python实现MQTT发布订阅过程原理解析
2020/07/27 Python
详解Python中的文件操作
2021/01/14 Python
解决H5的a标签的download属性下载service上的文件出现跨域问题
2019/07/16 HTML / CSS
印度在线内衣和时尚目的地:Zivame
2017/09/28 全球购物
台湾菁英交友:结识黄金单身的台湾人
2018/01/22 全球购物
eBay澳大利亚站:eBay.com.au
2018/02/02 全球购物
Nip + Fab官网:英国美容品牌
2019/08/26 全球购物
Footshop罗马尼亚:最好的运动鞋选择
2019/09/10 全球购物
新学期家长寄语
2014/01/19 职场文书
校园文化建设方案
2014/02/03 职场文书
2014全国两会大学生学习心得体会
2014/03/10 职场文书
中学生评语大全
2014/04/18 职场文书
国际商务专业求职信
2014/07/15 职场文书
同步小康驻村工作简报
2015/07/20 职场文书
2016年大学生社区服务活动总结
2016/04/06 职场文书