导图社区 python多线程基础
爬虫之——python多线程基础,进程是一个独立运行的程序单位,进程是由一个或多个线程构造的,线程是操作系统进行运算调度的最小单位。
python多进程基本原理,进程是具有一定独立功能的程序关于某个数据集合的一次运行活动,是资源分配和调度的一个独立单位。
https和http基本学习,HTTP是超文本传输协议,它是一个在计算机世界里专门在两点之间传输文字、图片、音频、视频等超文本数据的约定和规范。
Scrapy框架,引擎:框架的核心,其他组件在其控制下协同工作;调度器,负责对spider提交的下载请求进行调度;爬虫,负责提取页面中的数据,并产生对新页面的下载请求。
社区模板帮助中心,点此进入>>
互联网9大思维
组织架构-单商户商城webAPP 思维导图。
域控上线
python思维导图
css
CSS
计算机操作系统思维导图
计算机组成原理
IMX6UL(A7)
考试学情分析系统
多线程
多线程的含义
什么是进程
进程是一个独立运行的程序单位
进程是由一个或多个线程构造的
什么是线程
线程是操作系统进行运算调度的最小单位
线程是进程中的一个最小运行单元
多线程就是一个进程中同时执行多个线程
并发和并行
并发
指同一时刻只能有一条指令执行,但多个线程的对应指令被快速轮换的执行
每个线程的执行一定会占用这个处理器一个时间片段,同一个时刻只有一个线程在执行
并行
指同一时刻,有多条指令在多个处理器上同时执行,并行必须依赖于多个处理器。
多线程适用场景
等待数据库的查询结果的返回,等待网页结果的响应。
如网络爬虫,这种任务就是属于IO密集型任务
计算密集型任务,也可以称之为CPU密集型任务,就是在任务的运行一直需要处理器的参与,如果用多线程反而会降低效率。
如果任务不全是计算密集型任务,也可以用多线程来提高效率
Python实现多线程
创建子进程
Thread直接创建
thread = threading.Thread(target=target, args=[i])
target就是所定义的方法名,args以列表形式传递
继承Thread创建
class MyThread(threading.Thread): def __init__(self, second): threading.Thread.__init__(self) self.second = second def run(self):
线程需要执行的方法写在类的run方法里面
守护线程
设置为守护线程
setDaemon
如果主线程结束了,守护线程还没运行完会被强制结束
互斥锁
如果多个线程同时在对某个数据进行读取或者修改,就会出现不可预料的结果。
加锁保护,确保同一时间只有一个线程操作数据
threading.lock
python 多线程的问题
由于GIL的限制,导致不论是单核还是多核的条件下,在同一时刻只能运行一个线程,导致python多线程无法发挥多核并行的优势。
GIL 全称为 Global Interperter Lock,全局解释器锁
最初的设计是出于数据安全而考虑
在python多线程下,每个线程的执行方式
获取GIL
执行对应线程的代码
释放GIL
总结
对于爬虫这种IO密集型任务来说,多线程可以提高效率。而对于计算密集任务来说,由于GIL的存在,多线程总体的运行效率相比可能反而比单线程更低。