python中线程和进程_python中线程和进程的简单了解

一、操作系统、应用程序

1.硬件:硬盘、cpu、主板、显卡........

2.装系统(本身也是一个软件):

系统就是一个由程序员写出来的软件,该软件用于控制计算机得硬盘,让他们之间进行互相配合。

3.安装软件:各种应用程序

二、并发和并行

并发:伪,由于执行速度特别快,人感觉不到停顿

并行:真,创建多个对象同时操作

三、线程、进程

1.单进程、单线程的应用程序

print("asd")

2.到底什么是线程、进程

python中没有这两个,是python调用的操作系统的线程和进程

3.单进程、多线程的应用程序

importthreading    #两个进程print("start")deffunc(arg):print(arg)

t= threading.Thread(target=func,args=("......",))

t.start()print("end")#start#......#end

一个应用程序(软件),可以有多个进程(默认只有一个),一个进程中可以创建多个线程(默认一个)

总结:

1.操作系统帮助开发者操作硬件

2.程序员写好代码在操作系统上运行(依赖解释器)

1.线程的基本使用

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

importthreadingdeffunc(arg):print(arg)

t= threading.Thread(target=func,args=(11,))

t.start()print(22)#11#22

View Code

2.主线程默认等子线程执行完毕

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

importtimedeffunc(arg):

time.sleep(arg)print(arg)

t1= threading.Thread(target=func,args=(2,))

t1.start()

t2= threading.Thread(target=func,args=(4,))

t2.start()print("end")#end#2#4

View Code

3.主线程不再等待子线程,主线程终止所有的子线程也终止

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

deffunc(arg):

time.sleep(arg)print(arg)

t1= threading.Thread(target=func,args=(2,))

t1.setDaemon(True)

t1.start()

t2= threading.Thread(target=func,args=(4,))

t2.setDaemon(True)

t2.start()print("end")#end

View Code

4.开发者可以控制主线程等待子线程的(最多等待时间)

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

deffunc(arg):

time.sleep(0.01)print(arg)print('创建子线程t1')

t1= threading.Thread(target=func,args=(3,))

t1.start()#无参数,让主线程在这里等着,等到子线程t1执行完毕,才可以继续往下走。#有参数,让主线程在这里最多等待n秒,无论是否执行完毕,会继续往下走。

t1.join(2)print('创建子线程t2')

t2= threading.Thread(target=func,args=(9,))

t2.start()

t2.join(2) #让主线程在这里等着,等到子线程t2执行完毕,才可以继续往下走。

print(123)deffunc(arg):

time.sleep(0.01)print(arg)print('创建子线程t1')

t1= threading.Thread(target=func,args=(3,))

t1.start()#无参数,让主线程在这里等着,等到子线程t1执行完毕,才可以继续往下走。#有参数,让主线程在这里最多等待n秒,无论是否执行完毕,会继续往下走。

t1.join(2)print('创建子线程t2')

t2= threading.Thread(target=func,args=(9,))

t2.start()

t2.join(2) #让主线程在这里等着,等到子线程t2执行完毕,才可以继续往下走。

print(123)

View Code

5.线程名称

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

deffunc(arg):

t= threading.current_thread() #获取到执行当前函数的线程对象

name =t.getName()print(name,arg)

t1= threading.Thread(target=func,args=(1,))

t1.setName("t1") #为线程创建名称

t1.start()

t2= threading.Thread(target=func,args=(2,))

t2.setName("t2")

t2.start()print("end")#t1 1#t2 2#end

View Code

6.线程的本质

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

#先打印:11?end?

deffunc(arg):print(arg)

t1= threading.Thread(target=func,args=(11,))

t1.start()#start 是开始运行线程吗?不是#start 告诉cpu,我已经准备就绪,你可以调度我了。

print("end")

View Code

7.面向对象版本的多线程

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

importthreadingclassMyThread(threading.Thread):defrun(self):print(11111,self._args,self._kwargs) #********

t1 = MyThread(args=(11,))

t1.start()print("end")#11111 (11,) {}#end

View Code

python多线程情况下:

计算密集型操作:效率低(GIL锁)

IO操作:效率高

python多进程的情况下:

计算密集型:效率高(浪费资源)

IO操作:效率高(浪费资源)

在使用时:

IO密集型用多线程:文件、输入、输出、socket网络通信

计算密集型用多进程

四、python中线程和进程(GIL锁)

GIL锁,全局解释器锁,用于限制一个进程中同一时刻只有一个线程被cpu调度。

扩展:默认GIL锁在执行100个cup指令(过期时间)

importsys

v1=sys.getcheckinterval()print(v1)#100

8f900a89c6347c561fdf2122f13be562.png

961ddebeb323a10fe0623af514929fc1.png

importtimeimportthreading

lock= threading.RLock() #实例化一个锁的对象

n = 10

deffunc(i):print("这段代码不加锁",i)

lock.acquire()#加锁次区域的代码同一时刻只能有一个线程执行

globalnprint("当前线程",i,"读取到的n值",n)

n=i

time.sleep(1)print("当前线程",i,"修改n值为",n)

lock.release()#释放锁

for i in range(10):

t= threading.Thread(target=func,args=(i,))

t.start()#这段代码不加锁 0#当前线程 0 读取到的n值 10#这段代码不加锁 1#这段代码不加锁 2#这段代码不加锁 3#这段代码不加锁 4#这段代码不加锁 5#这段代码不加锁 6#这段代码不加锁 7#这段代码不加锁 8#这段代码不加锁 9#当前线程 0 修改n值为 0#当前线程 1 读取到的n值 0#当前线程 1 修改n值为 1#当前线程 2 读取到的n值 1#当前线程 2 修改n值为 2#当前线程 3 读取到的n值 2#当前线程 3 修改n值为 3#当前线程 4 读取到的n值 3#当前线程 4 修改n值为 4#当前线程 5 读取到的n值 4#当前线程 5 修改n值为 5#当前线程 6 读取到的n值 5#当前线程 6 修改n值为 6#当前线程 7 读取到的n值 6#当前线程 7 修改n值为 7#当前线程 8 读取到的n值 7#当前线程 8 修改n值为 8#当前线程 9 读取到的n值 8#当前线程 9 修改n值为 9

View Code

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/298366.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一份干货满满的PPT,答辩加分手到擒来!

全世界只有3.14 % 的人关注了爆炸吧知识对很多童鞋来说,PPT可以说是使用频率很高的办公软件了。毕业答辩需要PPT,项目总结需要PPT,演讲也都需要PPT……可你是否因为PPT陷入这样的——脑壳疼状态!花费大量时间,结果PPT效…

Blazor+Dapr+K8s微服务之基于WSL安装K8s集群并部署微服务

前面文章已经演示过,将我们的示例微服务程序DaprTest1部署到k8s上并运行。当时用的k8s是Docker for desktop 自带的k8s,只要在Docker for desktop中启用就可以了。但是我发现,启用了k8s后,Docker for desktop会消耗大量的系统资源…

记一次 .NET 某新能源汽车锂电池检测程序 UI挂死分析

一:背景 1. 讲故事这世间事说来也奇怪,近两个月有三位朋友找到我,让我帮忙分析下他的程序hangon现象,这三个dump分别涉及:医疗,新能源,POS系统。截图如下:那这篇为什么要拿其中的 新…

这个女生躲在衣柜等男友回家,结果竟是......

1 不要什么都怪爸爸我妈明明也是这样帮我脱的▼2 这就是现实版大女主反杀女二的故事啊▼3 我猜到了开头却没有猜到结尾▼4 ???一定是我被饿出了幻觉▼5 小小的孩子在极短的时间内经历了人生的大戏和大悲▼6 这个令人羡慕的发量啊&#…

mysql savepoint作用_savepoint原理

保存点在MySQL中, 保存点SAVEPOINT属于事务控制处理部分。利用SAVEPOINT可以回滚指定部分事务,从而使事务处理更加灵活和精细。SAVEPOINT相关的SQL语句如下SAVEPOINT identifier设置SAVEPOINT。如果重复设置同名savepoint,新的会覆盖老的.RELEASE SAVEPOINT identif…

路由器笔记 CCNA

配置路由器应用性<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />1配置端口1&#xff09; 配置局域网端口&#xff1a;进入&#xff08;config-if&#xff09;#模式 配置ip地址和掩码 &#xff08;config-if&#xff09;#ip a…

图片裁剪和异步上传插件--一步到位(记录)

图片上传裁剪这功能随处可见&#xff0c;有的自己写&#xff0c;不过太耗费时间了&#xff0c;插件的话感觉好多&#xff0c;前段时间就想挑一款好的插件&#xff0c;以后就用那款&#xff0c;可是挑了几款插件用上去&#xff0c;效果很好&#xff0c;问题就出在合并了&#xf…

git checkout 单个文件_git 如何回退单个文件

1.进入到文件所在文件目录&#xff0c;或者能找到文件的路径查看文件的修改记录git log fileName结果&#xff1a;如果文件修改记录太多&#xff0c;则使用git log -number fileName结果&#xff1a;2.回退到指定版本git reset ** fileName1.git reset -mixed&#xff1a;此为默…

未来十年最吃香专业大盘点,有你的吗?

全世界只有3.14 % 的人关注了爆炸吧知识这个世界上理工科到底有多吃香&#xff1f;如果你是理工男/女&#xff0c;先恭喜一下你&#xff0c;不知道喜从何来&#xff1f;不妨先来看这几组数据&#xff1a;高薪职业平均薪资一览表薪资最高的专业前20名这并不只是中国的情况&#…

mysql挂载到iscsi_corosync+pacemaker+iscsi磁盘实现mysql高可用

实验用主机&#xff1a;提供iscsi磁盘:172.16.103.1,提供iscsi磁盘高可用主机:172.16.103.2&#xff0c;172.16.103.3实验拓扑&#xff1a;实验步骤&#xff1a;一、配置172.16.103.1&#xff0c;输出iscsi磁盘&#xff0c;创建的磁盘分区为/dev/sda3&#xff0c;在实际的使用环…

一种在未来互联网中的面向用户的云操作系统体系

本文描述了一个欲将整个网络当做计算机使用&#xff0c;可以极大增强云计算应用能力和提高用户体验的一个类操作系统体系结构。望有识之士能做下去。 价值1&#xff09;用户的痛苦在哪里&#xff1f;对于终端用户&#xff0c;他们的痛苦在于使用Web应用不方便&#xff0c;可以使…

提高「搜商」,挣大钱

大家好&#xff0c;我是Z哥。在之前的一篇讲述数据分析的文章《这个时代最重要的技能之一》中提到了这周要和大家聊聊「搜商」的事情。搜商这个词诞生于互联网时代&#xff0c;体现的是一个人利用搜索引擎查找自己所需信息的能力。我觉得在当下这个时代&#xff0c;搜商的重要性…

idea 配置jdk版本_JDK 11 安装过程(同时已安装了JDK 8)以及Intellij IDEA 配置

电脑上已经安装过 JDK 8 版本(C:Javajdk1.8.0_111)。安装好 JDK 11 版本(C:Program FilesJavajdk-11.0.2)之后&#xff0c;目录如下&#xff0c;分别有&#xff1a;安装过程&#xff1a;1. 开始安装 JDK 11&#xff1b;2. 完成安装JDK 11&#xff1b;配置过程&#xff1a;1. 将…

老师,你和我的文具撞衫了!

全世界只有3.14 % 的人关注了爆炸吧知识来看越南学生拍摄的一组图&#xff0c;主题是老师和文具“撞衫”&#xff01;老师你和我的胶水撞了&#xff01;老师你和我的笔袋撞了&#xff01;老师你和我的手机壳撞了&#xff01;这个铅笔和老师好像啊书皮和老师很像老师今天穿得像面…

中小企业SaaS型软件BI的发展前景

2019独角兽企业重金招聘Python工程师标准>>> 传统企业在实施信息化的过程中&#xff0c;往往遵循着先用ERP把物料管起来&#xff0c;然后再CRM把客户关系管理起来&#xff0c;之后是财务系统&#xff0c;最后才会在数据的压力之下&#xff0c;实 施BI。那么&#xf…

穿透Session 0 隔离(一)

服务&#xff08;Service&#xff09;对于大家来说一定不会陌生&#xff0c;它是Windows 操作系统重要的组成部分。我们可以把服务想像成一种特殊的应用程序&#xff0c;它随系统的“开启&#xff5e;关闭”而“开始&#xff5e;停止”其工作内容&#xff0c;在这期间无需任何用…

navicat循环执行上下两行相减sql语句_SQL语句的优化分析

一、开门见山&#xff0c;问题所在sql语句性能达不到你的要求&#xff0c;执行效率让你忍无可忍&#xff0c;一般会时下面几种情况。网速不给力&#xff0c;不稳定。服务器内存不够&#xff0c;或者SQL 被分配的内存不够。sql语句设计不合理没有相应的索引&#xff0c;索引不合…

想不到,那些让我半夜偷偷收藏的沙雕表情包,竟是出自AI之手

全世界只有3.14 % 的人关注了爆炸吧知识转自&#xff1a;机器之心参与&#xff1a;蛋酱要是收藏夹里没几个独家沙雕表情包&#xff0c;当代网民都无法在朋友圈立足。但有一些「妙不可言」的图片&#xff0c;也许是 AI 生成的结果。一般人很难读出「meme」这个词&#xff0c;它通…

JavaScript中的arguments,callee,caller

2019独角兽企业重金招聘Python工程师标准>>> arguments: arguments 该对象代表正在执行的函数和调用它的函数的参数。 [function.]arguments[n]参数 function&#xff1a;选项。当前正在执行的 Function 对象的名字。 n &#xff1a;选项。要传递给 Function 对象的…

python总结函数图像_PIL使用小结(crop和paste函数)

PIL(Python Imaging Library)是python语言中对图像处理方面的一个开源库&#xff0c;其主要功能模块为Image&#xff0c;对于Image模块&#xff0c;可以使用from PIL import Image或者import Image由于使用了试用版的chartdir库&#xff0c;在生成图片的时候下面会出现一行提示…