python结束进程树_【python爬虫】线程进程
关注:程序运行速度---->主要是由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爬虫】线程进程相关推荐
- linux查询python的进程树_如何在Linux中查看所有正在运行的进程
你可以使用ps命令.它能显示当前运行中进程的相关信息,包括进程的PID.Linux和UNIX都支持ps命令,显示所有运行中进程的相关信息.ps命令能提供一份当前进程的快照.如果你想状态可以自动刷新,可 ...
- python自动进直播_(1/5)手把手教你如何录制b站直播,并且借助python实现部分自动化...
在经历了半个多月的录播折腾后,我逐渐摸索出一套比较简洁的录制方法(只是想偷懒而已) 从录播到投稿,我所使用解决方案有以下两种: 1. 录播姬录制FLV文件+python自动压制FLV文件 ...
- python apply_async死锁_python之并发编程(线程\进程\协程)
一.进程和线程 1.进程假如有两个程序A和B,程序A在执行到一半的过程中,需要读取大量的数据输入(I/O操作),而此时CPU只能静静地等待任务A读取完数据才能继续执行,这样就白白浪费了CPU资源.是不 ...
- python多进程编程实例_[python] Python多进程编程技术实例分析
这篇文章主要介绍了Python多进程编程技术,包括了线程.队列.同步等概念及相关的技巧总结,需要的朋友可以参考下 本文以实例形式分析了Python多进程编程技术,有助于进一步Python程序设计技巧. ...
- python查看excel编码格式_[Python]实现处理读写xlsx xls excel文件格式(含中文处理方法)...
最近有个需求要处理excel 格式的数据,数据量比较大.用传统的语言似乎不太好处理,于是改用python实现,这里记录一下实现过程. 首先,科普一下xlsx xls的excel文件区别是什么. xls ...
- python朋友圈刷屏_“Python太火了!请救救Java!”9万程序员刷屏朋友圈 !
没想到有生之年,笔者能观察到"霸主陨落"的过程,继PLPY4月榜单官宣,Python躺赢,再度"夺"冠,实力甩下Java和C后,近期,Stack Overflo ...
- python 打包 小文件_[Python][小知识][NO.5] 使用 Pyinstaller 打包成.exe文件
1.安装 pyinstaller 插件 cmd命令:pip install PyInstaller PS . o.o 不知道 easy_install 的百度吧. 2.pyinstaller 简介 他 ...
- python的进制转换器,Python进制转换
进制转换: 进制转换是人们利用符号来计数的方法. 进制转换由一组数码符号和两个基本因素"基数"与"位权"构成. 基数是指,进位计数制中所采用的数码(数制中用来表 ...
- python shell如何打开_“python shell怎么打开“python shell启动教程
python shell怎么打开 1.简介:如何在python中运行shell(bash命令) 2.工具/原料:python库:os.py 3.方法:import os command = 'date ...
最新文章
- hibernate xxx is not mapped 错误原因及解决方法
- 使用流光法实现物体跟踪
- php padright,[扩展推荐] PHP 字符串操作类 Twine
- RFC函数的初步使用-同步
- c++用new求数组中n个数的和_在C++中实现任意大小数组的定义方法
- jq之slideDown() stop()
- 实现页面内多个表格在滚动时,表头浮动的效果(是同时多个表格哟)
- android 高德amap开发二(地图操作)
- 51中断实验与流水灯protues仿真
- 如何配置Sql Server 2005之ODBC数据源连接
- node.js 执行JS文件连接数据库报错
- cashfiesta广告与传销?
- 计算机网络中传输速率 带宽 吞吐量三者的区别
- mfs文件服务器,MFS分布式文件系统搭建
- 彻底关闭苹果系统更新_彻底关闭iPhone自动更新系统 亲测有效
- 带阻滤波器对周期性噪声消除matlab实现
- 临沂中考计算机试题,2017临沂中考信息技术题库带答案
- 码农深夜骑车逆行被拦后爆发大哭,称压力好大!
- 各种不等式的解法收集【初级辅导和中级辅导】
- 【MacBook Pro 2016款 外接 GTX-1080显卡】- 技嘉 AORUS GTX 1080 Gaming Box (附安装参考教程)
热门文章
- mysql 有empty_blob()_【原创】操作Blob类型的方法
- datatables每页显示数据刷新后不变_2019北京积分落户名单数据的一些分析
- raspberrypi python传感器_Raspberry Pi和Arduino读取串行传感器d
- 两个特征是独立好还是正相关好_2021考研数学概率典型例题,都给你总结好啦!...
- python语言有哪两个系列_(转)Python学习笔记系列——Python是一种纯粹的语言
- Android开发之ApiCloud模块开发之模块引用第三方库的问题
- 网络设置巨形帧_网络工程师笔记:VLAN技术
- h5比html新增加的标签,HTML5(H5)新增属性和标签
- c语言编程微信公众号图片直播,如何以图片的形式在微信公众号文章中添加小程序...
- Java URL协议扩展实现