【2021最新版】Python 并发编程实战,用多线程、多进程、多协程加速程序运行
【2021最新版】Python 并发编程实战,用多线程、多进程、多协程加速程序运行
视频地址:https://www.bilibili.com/video/BV1bK411A7tV/
P1 Python并发编程简介
提纲
Python并发编程简介 P1 - 00:13
并发编程的使用场景
关键词 异步并发
Python并发编程简介 P1 - 00:29
不同等级的程序提速方法
Python并发编程简介 P1 - 02:06
程串行 》 多线程并发》 多CPU(是指多核)并行 》 多机器并行
怎样用python实现不同的并发方式
Python并发编程简介 P1 - 04:35
P2怎样选择多线程多进程多协程
总览
多进程的数目是不是和cpu的核数绑定在一起的?
怎样选择多线程多进程多协程 P2 - 00:27
对三种实现方式的应用场景的介绍,以及三种方式的不同。
CPU bound 与IO bound
怎样选择多线程多进程多协程 P2 - 02:55
Process、Thread和Coroutine 对比
有级联关系
GIL
协程可以达到几万个
怎样选择多线程多进程多协程 P2 - 03:23
协程使用的是一个线程的资源
怎么选择对应的技术
怎样选择多线程多进程多协程 P2 - 07:35
如果任务没有协程库的支持,是不能使用协程来实现的。
P3 Python速度慢的罪魁祸首,全局解释器锁GIL
速度慢的两个原因
Python速度慢的罪魁祸首,全局解释… P3 - 00:51
随时检查数据类型,造成新的数度慢的原因
GIL
Python速度慢的罪魁祸首,全局解释… P3 - 02:08
解释器 当然是python的
为什么有GIL
Python速度慢的罪魁祸首,全局解释… P3 - 04:24
怎么规避GIL带来的限制
Python速度慢的罪魁祸首,全局解释… P3 - 07:21
用它来执行IO密集型
P4 使用多线程,Python爬虫被加速10倍
python 创建多线程的方法
创建函数,创建子线程
第4步不是必须的
代码
爬取博客园
使用多线程,Python爬虫被加速10倍 P4 - 02:36
创建一个模块,添加一个脚本
新的写法 f"str{}"
第一步的代码
注意怎么写多线程的代码的
只有一个元素的元组不加逗号就是字符串
使用多线程,Python爬虫被加速10倍 P4 - 05:34
运行并且计时
执行顺序的区别(多线程是无序的)
P5 Python实现生产者消费者爬虫;线程之间通过queue来交互的
多组件的Pipeline 技术架构
Python实现生产者消费者爬虫 P5 - 01:18
不同的模块叫处理器 叫processor
这种把事情分很多模块处理的架构叫Pipeline
生产者消费者爬虫的架构
Python实现生产者消费者爬虫 P5 - 01:52
好处是不同的人开发,为任务配置不同的系统资源(比如线程数)
消费者消费中间数据
这两个线程的交互数据是怎么来进行呢?
Python实现生产者消费者爬虫 P5 - 02:37
线程安全是指多个线程并发的同时访问的数据不会冲突
怎么使用queue?
q.put q.get 都是阻塞的,这是使用中方便的一点
代码实现
Python实现生产者消费者爬虫 P5 - 03:47
接着上节的代码
def parse(消费者)提取页面中的所有文章的标题和链接
结果
多线程下的生产者消费者 代码
Python实现生产者消费者爬虫 P5 - 06:48
do_craw (生产者)do_parse(消费者)
fout 文件对象
中间数据的处理 sleep 和log
怎么通过多线程调度起来呢?
Python实现生产者消费者爬虫 P5 - 10:55
准备两个queue用于队列的交互
对url_queue 需要进行初始化,因为是整个pipeline的输入数据
启动生产者线程 并且加两个消费者线程
最后这个程序是卡住了,因为while True 会等待里面的线程
查看结果 data.txt
总结
Python实现生产者消费者爬虫 P5 - 14:02
对于复杂的爬虫可以分很多的模块,每个模块都可以起不同的线程组去处理;不同的线程组之间通过queue.Queue来交互的,通过queue.queue, 主线程把数据扔进去 ,然后把queue传给生产者,生产者会产出中间数据,然后消费者线程对中间数据处理,产出最终数据
P6线程安全问题,以及解决该问题的lock模块
提纲
Python线程安全问题以及解决方案 P6 - 00:22
线程安全是什么
Python线程安全问题以及解决方案 P6 - 00:31
解决方法 LOCk
Python线程安全问题以及解决方案 P6 - 03:29
左边是简写
这是又变成单线程了吗?
代码演示
Python线程安全问题以及解决方案 P6 - 04:29
结果
加time.sleep(0.1) 一定会导致线程不安全,因为time.sleep()一定会导致线程阻塞导致线程切换
修改
Python线程安全问题以及解决方案 P6 - 08:45
P7 好用的线程池ThreadPollExecutor
大纲
Python好用的线程池ThreadPoolExecutor P7 - 00:17
线程池的原理
Python好用的线程池ThreadPoolExecutor P7 - 00:37
五个状态相互流转
线程池怎么流转
通过一个任务队列以及一个可重用的线程就实现了一个线程池
好处和使用场景
Python好用的线程池ThreadPoolExecutor P7 - 02:46
怎么使用?
Python好用的线程池ThreadPoolExecutor P7 - 03:47
futures 是什么时候运行的呢,是futures 初始化的时候,还是遍历future的时候?
在自己创建线程里获取结果是很麻烦的,只能通过queue
as_completed 那个先执行完就返回
代码
Python好用的线程池ThreadPoolExecutor P7 - 06:10
使用map 来改造craw和parse
执行结果是按照顺序的
转为 as_completed
总结
Python好用的线程池ThreadPoolExecutor P7 - 11:44
pool 虽然简洁 不能随时提交任务,需要随时把参数准备好, 返回也是按顺序返回的
as_completed 随时提交任务,先结束先返回
P8 Python使用线程池在Web服务中实现加速
提纲
Python使用线程池在Web服务中实现加速 P8 - 00:18
web服务的架构和特点
Python使用线程池在Web服务中实现加速 P8 - 00:43
第3点就暗示了不能无限的启动线程
使用线程池来加速
Python使用线程池在Web服务中实现加速 P8 - 02:15
代码
Python使用线程池在Web服务中实现加速 P8 - 02:53
加个方法
万能键创建方法
加起来是600多毫秒 postman 测试时间
怎么加速呢?
Python使用线程池在Web服务中实现加速 P8 - 06:25
sleep 体现IO
初始化一个全局的pool, 方法内分别创建是有问题的
重新运行,时间变成了0.318 是原来的一半, 是最长时间
P9 从多线程切换到多进程
使用多进程multiprocessing模块加速程序的运行 P9 - 00:05
提纲
使用多进程multiprocessing模块加速程序的运行 P9 - 00:19
有了多线程,为什么还要多进程呢
使用多进程multiprocessing模块加速程序的运行 P9 - 00:50
是多进程,系统中运行了多个python 解释器, 他们真正的只并行计算, 但是也相应的会有一些负担
怎么使用呢 语法
使用多进程multiprocessing模块加速程序的运行 P9 - 02:18
多进程的知识梳理(多进程和多线程几乎一样,这也是设计者为了让使用者无缝切换)
单线程 多线程, 多进程对CPU密集型计算速度对比
使用多进程multiprocessing模块加速程序的运行 P9 - 04:57
代码
使用多进程multiprocessing模块加速程序的运行 P9 - 06:02
没有涉及到IO
线性塞?
新写法 [1, 2, …] * 100
不同执行方式
结果 听风扇
总结
使用多进程multiprocessing模块加速程序的运行 P9 - 10:47
P10 异步IO (引入协程)
Python异步IO实现并发爬虫 P11 - 00:02
引入协程
异步IO库 asyncio
Python异步IO实现并发爬虫 P11 - 03:08
await 声明IO
awiat 的时候不能阻塞, 不然单线程就不能并发执行了(协程是线程内的,线程阻塞了,这个协程当然也就阻塞了)
代码
Python异步IO实现并发爬虫 P11 - 05:18
定义异步对象
协程就是在异步IO 里执行的这个函数,函数与普通函数的不同就是这个函数是接受超级循环来调度的
获取超级循环 loop
对每个url创建一个针对的task(使用协程函数定义task)
结果
如果任务要一个一个加入该怎么办呢?
对比
Python异步IO实现并发爬虫 P11 - 09:47
单线程异步大部分情况下是快于多线程的(因为多线程并发切换是花费时间的, 单线程异步没有切换的开销)
需要有线程库的支持
P11在异步IO中使用信号量控制爬虫并发度
什么是信号量 以及使用语法
在异步IO中使用信号量控制爬虫并… P12 - 00:21
是一个计数器,数值可以对并发度的限制,当一个线程进去,数值减一
总量限制在10 以内?
代码
改造上面的异步IO的代码,加入并发量
在异步IO中使用信号量控制爬虫并… P12 - 03:08
初始化信号量 seaphore 10 是并发度
结果
发现10个任务后会暂停一会
P12使用subprocess调用外部程序
Python使用subprocess播放歌曲解压文件 P13 - 00:01
视频源不见了,标记失效
subprocess介绍
实例
定义对象,执行对象
代码
Python使用subprocess播放歌曲解压文件 P13 - 02:44
视频源不见了,标记失效
【2021最新版】Python 并发编程实战,用多线程、多进程、多协程加速程序运行相关推荐
- python:一文搞懂多线程,多进程,异步协程的使用场景
本文将使用场景化为案例,将单线程,多线程,多进程,异步协程的速度进行对比 对比速度时, >表示 速度快于 >>表示速度远快于 =表示速度差不多 >>>> ...
- Python并发编程系列之多线程
1 引言 上一篇博文详细总结了Python进程的用法,这一篇博文来所以说Python中线程的用法.实际上,程序的运行都是以线程为基本单位的,每一个进程中都至少有一个线程(主线程),线程又可以创建子线程 ...
- Python|并发编程|爬虫|单线程|多线程|异步I/O|360图片|Selenium及JavaScript|Scrapy框架|BOM 和 DOM 操作简介|语言基础50课:学习(12)
文章目录 系列目录 原项目地址 第37课:并发编程在爬虫中的应用 单线程版本 多线程版本 异步I/O版本 总结 第38课:抓取网页动态内容 Selenium 介绍 使用Selenium 加载页面 查找 ...
- python并发编程书籍推荐_《吐血整理》-顶级程序员书单集
<程序人生>十年风雨技术人的书单整理 前言 王潇:格局决定了一个人的梦想,梦想反过来决定行为. 那格局是什么呢? 格局是你能够看见的深度.广度和密度. 王潇认为,格局是一本本书搭建起来的, ...
- Python 并发编程之使用多线程和多处理器
在Python编码中我们经常讨论的一个方面就是如何优化模拟执行的性能.尽管在考虑量化代码时NumPy.SciPy和pandas在这方面已然非常有用,但在构建事件驱动系统时我们无法有效地使用这些工具.有 ...
- python多线程调度_python并发编程之进程、线程、协程的调度原理(六)
进程.线程和协程的调度和运行原理总结. 系列文章 进程.线程的调度策略介绍 linux中的进程主要有三种调度策略: 优先级调度:将进程分为普通进程和实时进程: 先进先出(队列)调度:实时进程先创建的先 ...
- 并发编程(进程、线程、协程)
操作系统 一 为什么要有操作系统? 现代计算机系统是由一个或者多个处理器,主存,磁盘,打印机,键盘,鼠标显示器,网络接口以及各种其他输入输出设备组成的复杂系统,每位程序员不可能掌握所有系统实现的细节, ...
- Python中多线程多进程与协程的区别
进程:一个运行的程序(代码)就是一个进程,没有运行的代码叫程序,进程是系统资源分配的最小单位,进程拥有自己独立的内存空间,所以进程间数据不共享,开销大. 线程: 调度执行的最小单位,也叫执行路径,不能 ...
- python多线程多进程多协程_python 多进程、多线程、协程
1.python的多线程 多线程就是在同一时刻执行多个不同的程序,然而python中的多线程并不能真正的实现并行,这是由于cpython解释器中的GIL(全局解释器锁)捣的鬼,这把锁保证了同一时刻只有 ...
最新文章
- kint 一个强大的php调试助手
- java51游戏_Java作业实践(一)魔板游戏
- 2022年美国大学生数学建模竞赛——Problem A:自行车手的功率剖面
- 2019年了,C#发展的怎么样了呢?
- 让服务器突破性能极限 阿里云神龙论文入选计算机顶会ASPLOS
- 终极神器盘点的FreeEIM
- flowable 中文文档_取出word文档文字内容生成加了目录、标号和页码的PDF文件
- 我看《Linux0.11内核完全注释2.01》的方法
- zookeeper 四字命令的使用
- python抓取图片_Python3简单爬虫抓取网页图片
- windows 安装jenkins
- 第十届全国社会媒体处理大会 (SMP 2021) 征文通知
- C#版 Tag云图控件
- 我们为什么要骑驴找马?
- mysql Events及存储过程查看
- 20吉大计算机/软件考研经验贴!
- Python 饼图
- Linux安装Elasticsearch和Kibana
- StarUML使用说明—用例图、时序图、活动图
- 倍福PLC在NC轴报错代码18000原因分析
热门文章
- 中鑫吉鼎|家庭理财规划具体有哪些步骤
- EDIUS中的3D图层效果该如何制作
- mysql(v5.*)创建数据库用户并授权
- mysql double 索引_MySQL架构优化实战系列1:数据类型与索引调优全解析
- python制作3d相册代码_Python使用matplotlib绘制3D图形(代码示例)
- 已修复最新固件问题Surface Pro 6 安装黑苹果15.6 完美版,触控板、显卡、声音、USBWiFi驱动,一步到位懒人必备--(原创)杨泽鹏
- 40岁就该下岗?IBM涉嫌年龄歧视,称其老员工为“恐龙”并计划辞退,员工竟无法反驳
- 手机app直播源码开发搭建
- Android 6.0手机存储图片以及下载apk需要申请动态权限
- div可编辑,contenteditable 属性