Python 多线程,threading模块,创建子线程的两种方式示例
作者:houyanhua1 发布时间:2021-06-29 15:49:32
标签:Python,多线程,threading模块,创建子线程
本文实例讲述了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程序设计有所帮助。
来源:https://blog.csdn.net/houyanhua1/article/details/84307508


猜你喜欢
- 本文实例为大家分享了bootstrapValidator表单验证的具体代码,供大家参考,具体内容如下1.页面引入css、js<link
- 本文旨在介绍 vue-router 的实现思路,并动手实现一个简化版的 vue-router 。我们先来看一下一般项目中对 vue-rout
- 1.引言甘特图已经拥有 100 多年的历史,这种可视化图表对项目管理非常有用。Henry Gantt 为了分析已经完成的项目创建了甘特图,他
- 注:转载就注入出自'孤孤浪子博客'原创 http://itpro.blog.163.com 第一步 http://itpro
- 相信很多人在使用正则表达式的时候都会遇到如下的语句:通过查阅正则表达式的API文档可以了解到正则表达式的语法知识:很多小伙伴就会产生疑问为什
- django-pipeline 是一个 Django 下非常方便的静态资源管理 app,尤其是 1.2 版本之后,利用 djan
- 直方图的定义直方图的性质只统计某个灰度级出现的次数,图像的大小不一样的话, 某灰度值的像素出现的次数是不一样的。那如果我们在这基础上除以像素
- 问题你想读写一个gzip或bz2格式的压缩文件。解决方案gzip 和 bz2 模块可以很容易的处理这些文件。 两个模块都为 open() 函
- 看代码吧~def test(): return 1,2a, b = test()1 2a, _ = test()1
- 概述pydicom是一个常用python DICOM parser。但是,没有提供解析多帧图的示例。本文结合相关函数和DICOM知识做一个简
- 因为最近要经常转换数据集进行实验,因此记录一下。1、视频转图片即为将视频解析为一帧一帧的图片:import cv2vc=cv2.VideoC
- 微信的小程序是一个很不错的体验,简单,上手快,这几天也在学习使用小程序,自己总结了三种用 Python 作为小程序后端的方式,供你参考。方法
- 在我的博客上,以前我经常谈到SQL Serverl里的书签查找,还有它们带来的很多问题。在今天的文章里,我想从性能角度进一步谈下书签查找,还
- 本文实例讲述了mysql基于正则实现模糊替换字符串的方法。分享给大家供大家参考,具体如下:例如: abcd(efg)hijk 替换之后是ab
- 随着国家发展,中国很多城市的空气质量其实并不好,国家气象局会有实时统计,但是要去写爬虫爬取是十分麻烦的事情,并且官方网站也会做一些反爬虫措施
- Python-apply(lambda x: )使用def instant_order_deal(plat, special_product
- 出现这个问题的原因不是'/xxx.frm'这个文件不见了,而是这些文件的权限(应该要是mysql)不知道为什么变成了root
- typora介绍Typora是一款Markdown编辑器和阅读器风格极简/多种主题/支持 macOS,Windows 及 Linux实时预览
- 废话不多说,直接看问题,使用过 Python 中的标准库 zipfile 解压过 zip&
- 今天展示一个利用pandas将json数据导入excel例子,主要利用的是pandas里的read_json函数将json数据转化为data