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中实现远程调用(RPC、RMI)简单例子
Apr 28 Python
Python的内存泄漏及gc模块的使用分析
Jul 16 Python
python根据开头和结尾字符串获取中间字符串的方法
Mar 26 Python
Python 3.x 判断 dict 是否包含某键值的实例讲解
Jul 06 Python
Python脚本按照当前日期创建多级目录
Mar 01 Python
用python实现英文字母和相应序数转换的方法
Sep 18 Python
VS2019+python3.7+opencv4.1+tensorflow1.13配置详解
Apr 16 Python
pycharm-professional-2020.1下载与激活的教程
Sep 21 Python
Python中zipfile压缩包模块的使用
May 14 Python
python 中的@运算符使用
May 26 Python
Python测试框架pytest高阶用法全面详解
Jun 01 Python
Python使用pandas导入csv文件内容的示例代码
Dec 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下载文件的详解
2013/06/02 PHP
PHP中的函数-- foreach()的用法详解
2013/06/24 PHP
destoon安全设置中需要设置可写权限的目录及文件
2014/06/21 PHP
PHP面向对象程序设计之接口用法
2014/08/20 PHP
php rmdir使用递归函数删除非空目录实例详解
2016/10/20 PHP
ExtJS GTGrid 简单用户管理
2009/07/01 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
JavaScript中的bold()方法使用详解
2015/06/08 Javascript
js实现接收表单的值并将值拼在表单action后面的方法
2015/11/23 Javascript
jQuery插件Validate实现自定义表单验证
2016/01/18 Javascript
JavaScript新增样式规则(推荐)
2016/07/19 Javascript
vue中mint-ui环境搭建详细介绍
2017/04/06 Javascript
JS排序之选择排序详解
2017/04/08 Javascript
薪资那么高的Web前端必看书单
2017/10/13 Javascript
Vue中computed与methods的区别详解
2018/03/24 Javascript
学习JS中的DOM节点以及操作
2018/04/30 Javascript
JS实现图片轮播效果实例详解【可自动和手动】
2019/04/04 Javascript
vue 子组件修改data或调用操作
2020/08/07 Javascript
vue的$http的get请求要加上params操作
2020/11/12 Javascript
Vue3+elementui plus创建项目的方法
2020/12/01 Vue.js
Python图像灰度变换及图像数组操作
2016/01/27 Python
Linux RedHat下安装Python2.7开发环境
2017/05/20 Python
django初始化数据库的实例
2018/05/27 Python
详解Django+Uwsgi+Nginx 实现生产环境部署
2018/11/06 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
python实现复制文件到指定目录
2019/10/16 Python
解决django-xadmin列表页filter关联对象搜索问题
2019/11/15 Python
CSS3区域模块region相关编写示例
2015/08/28 HTML / CSS
html5的pushstate以及监听浏览器返回事件的实现
2020/08/11 HTML / CSS
KLOOK客路:发现更好玩的世界,预订独一无二的旅行体验
2016/12/16 全球购物
Carter’s官方旗舰店:美国受欢迎的婴童服装品牌
2018/01/21 全球购物
校园公益广告语
2014/03/13 职场文书
企业金融服务方案
2014/06/03 职场文书
放假通知怎么写
2015/08/18 职场文书
公安纪律作风整顿心得体会
2016/01/23 职场文书
CSS 一行代码实现头像与国旗的融合
2021/10/24 HTML / CSS