关注:程序运行速度---->主要是由cpu(大脑)来决定。

想要提高程序的运行速度----->提高cpu利用率。

提高cpu的利用率由两种途径:

1、让cpu不休息。cpu每时每刻都在处理任务,这个任务可以理解为线程。这种情况就叫做多线程。

2、cpu都是分核。每个核就是一个小脑袋。可以理解一心多用。让每个核都作用起来,去干不同的事情,这种方法是就叫多进程。

一、程序、线程、进程

1、程序:一个应用就可以理解为一个程序。

2、进程:程序运行资源分配的最小单位,一个程序可以有多个进程。

3、线程:cpu最小的调度单位,必须依赖进程存在。线程是没有独立资源的,所有的线程共享他所在进程的所有资源。

二、什么是多线程?

程序中包含多个并行的线程来完成不同的任务。

三、python中的threading模块

1、创建多线程的第一种方法

1 t =threading.Thread(2 target =方法名,3 args = (,) #参数列表,元组

4 )5 t.start() #启动线程

2、查看线程的数量:threading.enumerate()

1 enumerate(2 可迭代对象,3 i, #表示索引从i开始。

4 ) #python的内置函数:枚举可迭代对象,同时获取迭代对象的每个值和其索引。

可迭代对象:有__iter__属性的对象。

迭代器:有__iter___和__next__属性的对象。

这两个如何转化:迭代器=iter(可迭代对象)

可迭代对象都有:list,tuple,dict,str,bytesarray,set,fp

3、创建第二种方法:自定线程类

(1)python的继承

①继承是通过在定义类的时候,类后面的()中添加父类来实现的。

②被继承的类称为父类,继承的类称为子类。

③子类继承父类所有非私有的属性及方法。

④如果子类重写父类的属性和方法,子类默认是优先拿自己的。

(2)用自定义线程的步骤

①继承threading.Thread

②重写run方法:

③实例化这个类,就相当于创建了一个线程。

t = MyThread()

t.start()---默认执行就是run方法里面的内容。

④如果自定义线程要传参数,这时候必须要写init方法。必须在init中先调用父类的init(初始化父类。)

(3)调用父类的init方法有两种方法

super().__init__()

threading.Tread.__init__(self)

4、线程的名称:线程.name查看线程的名称

如果没有给线程自定义名称,默认线程的名称是:Thread-1,Thread-2,....

自定义名称:

t = MyThread(name=str(i))

t.start()

5、线程的五种状态

线程的执行顺序是混乱:线程是cup调度的最小单位,线程的执行完全是由cpu调度所决定的。cpu如何来调度呢?是由线程状态决定。

6、线程间公用数据的共享问题

多个线程多全局变量的更改,容易造成数据的混乱。

解决办法:将线程对公有数据更改部分,用互斥锁锁起来,这两就可以解决这种问题。

多线程避免多个线程同时处理公有变量。——解耦。

1 importthreading2

3 mutex = threading.Lock() #创建一个锁对象

4

5 if mutex.acquire(): #上锁

6

7 '''

8 公有数据的处理代码9 '''

mutex.release()#释放锁

mutex.acquire(True):默认情况就是True,线程到锁这里如果没有获取锁状态,就会被阻塞。

mutex.acquire(False):线程到锁这里如果没有获取锁状态,不会被阻塞。

四、多进程和多线程

1、并发和并行

2、多线程和多进程的优缺点

多线程

(1)多线程的优点

所有线程可以直接共享内存和变量,线程之间的通信变得容易。

线程方式消耗的总资源比进程方式少。

(2)多线程缺点

程序逻辑和控制方式复杂。

线程之间的同步和加锁比较麻烦。

一个线程崩溃可能影响到整个程序的稳定性。

多进程

(1)多进程优点

每个进程都相互独立,不影响主程序的稳定性,子进程崩溃,主程序收到影响比较小。

通过增加cup,可以轻松扩展性能。

每个子进程都有2GB地址空间和相关资源,总体性能能够达到的上限非常大。

(2)多进程的缺点

逻辑控制复杂,需要和主程序交互。----进程之间通信是很困难度。

如果有大量数据传送,需要跨进程边界。适合小数量数据传送的程序。

多进程和多线程如何选择:在实际开发中,选择多线程还是多进程,应该从具体实际开发来进行选择。最好是多进程和多线程结合,即根据实际的需求,每个cpu开启一个子进程,这个子进程开启多个线程进程数据处理。

五、死锁

产生死锁的两中情况

1、同一个线程,先后获取两次锁对象,就会产生死锁。

2、A获取锁1,B获取锁2,A在不释放锁1的情况试图获取锁2,B在不释放锁2的情况下试图获取锁1,此时就会产生死锁。

python结束进程树_【python爬虫】线程进程相关推荐

  1. linux查询python的进程树_如何在Linux中查看所有正在运行的进程

    你可以使用ps命令.它能显示当前运行中进程的相关信息,包括进程的PID.Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息.ps命令能提供一份当前进程的快照.如果你想状态可以自动刷新,可 ...

  2. python自动进直播_(1/5)手把手教你如何录制b站直播,并且借助python实现部分自动化...

    在经历了半个多月的录播折腾后,我逐渐摸索出一套比较简洁的录制方法(只是想偷懒而已) 从录播到投稿,我所使用解决方案有以下两种: 1.        录播姬录制FLV文件+python自动压制FLV文件 ...

  3. python apply_async死锁_python之并发编程(线程\进程\协程)

    一.进程和线程 1.进程假如有两个程序A和B,程序A在执行到一半的过程中,需要读取大量的数据输入(I/O操作),而此时CPU只能静静地等待任务A读取完数据才能继续执行,这样就白白浪费了CPU资源.是不 ...

  4. python多进程编程实例_[python] Python多进程编程技术实例分析

    这篇文章主要介绍了Python多进程编程技术,包括了线程.队列.同步等概念及相关的技巧总结,需要的朋友可以参考下 本文以实例形式分析了Python多进程编程技术,有助于进一步Python程序设计技巧. ...

  5. python查看excel编码格式_[Python]实现处理读写xlsx xls excel文件格式(含中文处理方法)...

    最近有个需求要处理excel 格式的数据,数据量比较大.用传统的语言似乎不太好处理,于是改用python实现,这里记录一下实现过程. 首先,科普一下xlsx xls的excel文件区别是什么. xls ...

  6. python朋友圈刷屏_“Python太火了!请救救Java!”9万程序员刷屏朋友圈 !

    没想到有生之年,笔者能观察到"霸主陨落"的过程,继PLPY4月榜单官宣,Python躺赢,再度"夺"冠,实力甩下Java和C后,近期,Stack Overflo ...

  7. python 打包 小文件_[Python][小知识][NO.5] 使用 Pyinstaller 打包成.exe文件

    1.安装 pyinstaller 插件 cmd命令:pip install PyInstaller PS . o.o 不知道 easy_install 的百度吧. 2.pyinstaller 简介 他 ...

  8. python的进制转换器,Python进制转换

    进制转换: 进制转换是人们利用符号来计数的方法. 进制转换由一组数码符号和两个基本因素"基数"与"位权"构成. 基数是指,进位计数制中所采用的数码(数制中用来表 ...

  9. python shell如何打开_“python shell怎么打开“python shell启动教程

    python shell怎么打开 1.简介:如何在python中运行shell(bash命令) 2.工具/原料:python库:os.py 3.方法:import os command = 'date ...

最新文章

  1. hibernate xxx is not mapped 错误原因及解决方法
  2. 使用流光法实现物体跟踪
  3. php padright,[扩展推荐] PHP 字符串操作类 Twine
  4. RFC函数的初步使用-同步
  5. c++用new求数组中n个数的和_在C++中实现任意大小数组的定义方法
  6. jq之slideDown() stop()
  7. 实现页面内多个表格在滚动时,表头浮动的效果(是同时多个表格哟)
  8. android 高德amap开发二(地图操作)
  9. 51中断实验与流水灯protues仿真
  10. 如何配置Sql Server 2005之ODBC数据源连接
  11. node.js 执行JS文件连接数据库报错
  12. cashfiesta广告与传销?
  13. 计算机网络中传输速率 带宽 吞吐量三者的区别
  14. mfs文件服务器,MFS分布式文件系统搭建
  15. 彻底关闭苹果系统更新_彻底关闭iPhone自动更新系统 亲测有效
  16. 带阻滤波器对周期性噪声消除matlab实现
  17. 临沂中考计算机试题,2017临沂中考信息技术题库带答案
  18. 码农深夜骑车逆行被拦后爆发大哭,称压力好大!
  19. 各种不等式的解法收集【初级辅导和中级辅导】
  20. 【MacBook Pro 2016款 外接 GTX-1080显卡】- 技嘉 AORUS GTX 1080 Gaming Box (附安装参考教程)

热门文章

  1. mysql 有empty_blob()_【原创】操作Blob类型的方法
  2. datatables每页显示数据刷新后不变_2019北京积分落户名单数据的一些分析
  3. raspberrypi python传感器_Raspberry Pi和Arduino读取串行传感器d
  4. 两个特征是独立好还是正相关好_2021考研数学概率典型例题,都给你总结好啦!...
  5. python语言有哪两个系列_(转)Python学习笔记系列——Python是一种纯粹的语言
  6. Android开发之ApiCloud模块开发之模块引用第三方库的问题
  7. 网络设置巨形帧_网络工程师笔记:VLAN技术
  8. h5比html新增加的标签,HTML5(H5)新增属性和标签
  9. c语言编程微信公众号图片直播,如何以图片的形式在微信公众号文章中添加小程序...
  10. Java URL协议扩展实现