python协程和任务
协程概念引入
协程是我要重点去讲解的一个知识点. 它能够更加高效的利用CPU.
其实, 我们能够高效的利用多线程来完成爬虫其实已经很6了. 但是, 从某种角度讲, 线程的执行效率真的就无敌了么? 我们真的充分的利用CPU资源了么? 非也~ 比如, 我们来看下面这个例子.
我们单独的用一个线程来完成某一个操作. 看看它的效率是否真的能把CPU完全利用起来.
import timedef func():print("我爱黎明")time.sleep(3)print("我真的爱黎明")func()
各位请看. 在该程序中, 我们的func()实际在执行的时候至少需要3秒的时间来完成操作. 中间的三秒钟需要让我当前的线程处于阻塞状态. 阻塞状态的线程 CPU是不会来执行你的. 那么此时cpu很可能会切换到其他程序上去执行. 此时, 对于你来说, CPU其实并没有为你工作(在这三秒内), 那么我们能不能通过某种手段, 让CPU一直为我而工作. 尽量的不要去管其他人.
我们要知道CPU一般抛开执行周期不谈, 如果一个线程遇到了IO操作, CPU就会自动的切换到其他线程进行执行. 那么, 如果我想办法让我的线程遇到了IO操作就挂起, 留下的都是运算操作. 那CPU是不是就会长时间的来照顾我~.
以此为目的, 伟大的程序员就发明了一个新的执行过程. 当线程中遇到了IO操作的时候, 将线程中的任务进行切换, 切换成非 IO操作. 等原来的IO执行完了. 再恢复回原来的任务中.
async def func():print("我是协程")
if __name__ == '__main__':# print(func()) # 注意, 此时拿到的是一个协程对象, 和生成器差不多.该函数默认是不会这样执行的coroutine = func()asyncio.run(coroutine) # 用asyncio的run来执行协程.# lop = asyncio.get_event_loop()# lop.run_until_complete(coroutine) # 这两句顶上面一句
async def main():print("start")# # 添加协程任务# t1 = asyncio.create_task(func1())# t2 = asyncio.create_task(func2())# t3 = asyncio.create_task(func3())## ret1 = await t1# ret2 = await t2# ret3 = await t3tasks = [asyncio.create_task(func1()),asyncio.create_task(func2()),asyncio.create_task(func3())]# 一次性把所有任务都执行done, pedding = await asyncio.wait(tasks)print("end")if __name__ == '__main__':start = time.time()asyncio.run(main())print(time.time() - start)
异步请求(aiohttp)和同步请求(requests)的不同
import aiohttp
import asyncio
import aiofilesasync def download(url):try:name = url.split("/")[-1]# 创建session对象 -> 相当于requsts对象async with aiohttp.ClientSession() as session:# 发送请求, 这里和requests.get()几乎没区别, 除了代理换成了proxyasync with session.get(url) as resp:# 读取数据. 如果想要读取源代码. 直接resp.text()即可. 比原来多了个()content = await resp.content.read()# 写入文件, 用默认的open也OK. 用aiofiles能进一步提升效率async with aiofiles.open(name, mode="wb") as f:await f.write(content)return "OK"except:print(123)return "NO"async def main():url_list = ["http://pic3.hn01.cn/wwl/upload/2021/06-30/omv2i40essl.jpg","http://pic3.hn01.cn/wwl/upload/2021/06-30/kg3ccicvnqd.jpg","http://pic3.hn01.cn/wwl/upload/2021/06-30/jhw5yhbtyaa.jpg","http://pic3.hn01.cn/wwl/upload/2021/06-30/y1enehg1esu.jpg","http://pic3.hn01.cn/wwl/upload/2021/06-28/2pshuolbhrg.jpg",]tasks = []for url in url_list:# 创建任务task = asyncio.create_task(download(url))tasks.append(task)await asyncio.wait(tasks)if __name__ == '__main__':asyncio.run(main())async def factorial(name, number):f = 1for i in range(2, number + 1):print(f"Task {name}: Compute factorial({number}), currently i={i}...")await asyncio.sleep(1)f *= iprint(f"Task {name}: factorial({number}) = {f}")return fasync def main1():# Schedule three calls *concurrently*:L = await asyncio.gather(factorial("A", 2),factorial("B", 3),factorial("C", 4),)print(L)asyncio.run(main1())
相关文章:
python协程和任务
协程概念引入 协程是我要重点去讲解的一个知识点. 它能够更加高效的利用CPU. 其实, 我们能够高效的利用多线程来完成爬虫其实已经很6了. 但是, 从某种角度讲, 线程的执行效率真的就无敌了么? 我们真的充分的利用CPU资源了么? 非也~ 比如, 我们来看下面这个例子. 我们…...
visual studio code配置anaconda3的python虚拟环境
参考: Visual Studio Code配置anconda3虚拟环境 - 知乎...
【Unity3D编辑器开发】Unity3D编辑器开发基础性框架结构【全面总结】
推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享简书地址我的个人博客 大家好,我是佛系工程师☆恬静的小魔龙☆,不定时更新Unity开发技巧,觉得有用记得一键三连哦。 一、前言 嗨,大家好,我是恬静的小魔龙。 同学们…...
一座“城池”:泡泡玛特主题乐园背后,IP梦想照亮现实
“更适合中国宝宝体质”的主题乐园,被泡泡玛特造出来了。 9月26日,位于北京朝阳公园内的国内首个潮玩行业沉浸式 IP 主题乐园,也是泡泡玛特首个线下乐园——泡泡玛特城市乐园 POP LAND正式开园。 约4万平方米的空间中,泡泡玛特使…...
【什么是闭包? 闭包产生的原因? 闭包有哪些表现形式?】
JS闭包 什么是闭包?闭包产生的原因?闭包有哪些表现形式? 什么是闭包? 闭包是指一个函数可以访问并操作在其作用域之外的变量的能力。在 JavaScript 中,每当函数被创建时,就会创建一个闭包。 以下是一个简单的闭包示例…...
JackJson和FastJson
前言: fastjson是一款强大的json格式转换工具,我个人在开发中就非常喜欢用fastjson;但是由于某些原因,导致fastjson会有一些漏洞,因此在漏洞扫描后需要修复都是要求我们升级版本,或者替换为jackjson&#…...
SpringCloud学习一
单体应用存在的问题 随着业务的发展,开发变得越来越复杂。 修改、新增某个功能,需要对整个系统进行测试、重新部署。 一个模块出现问题,很可能导致整个系统崩溃。 多个开发团队同时对数据进行管理,容易产生安全漏洞。 各个模块…...
SpringBoot, EventListener事件监听的使用
1、背景 在开发工作中,会遇到一种场景,做完某一件事情以后,需要广播一些消息或者通知,告诉其他的模块进行一些事件处理,一般来说,可以一个一个发送请求去通知,但是有一种更好的方式,…...
课题学习(三)----倾角和方位角的动态测量方法(基于陀螺仪的测量系统)
一、内容介绍 该测量系统基于三轴加速度和三轴陀螺仪,安装在钻柱内部,随钻柱一起旋转,形成捷联惯性导航系统,安装如下图所示: 假设三轴加速度和陀螺仪的输出为: f b [ f x f y f z ] T f^b\begin{bmatrix}f_{x} …...
1876. 长度为三且各字符不同的子字符串
1876. 长度为三且各字符不同的子字符串 C代码:滑动窗口 // 存在三种字符,且不重复、子串数量 int countGoodSubstrings(char * s){int k 3;int hash[26] {0};int len 0;int l 0;int ans 0;for (int i 0; i < strlen(s); i) {hash[s[i] - a];if…...
Mall脚手架总结(一)——SpringSecurity实现鉴权认证
前言 在结束理论知识的学习后,荔枝开始项目学习,这个系列文章将围绕荔枝学习mall项目过程中总结的知识点来梳理。本篇文章主要涉及如何整合Spring Security和JWT实现鉴权认证的功能!希望能帮助到一起学习mall项目的小伙伴~~~ 文章目录 前言 …...
beego-简单项目写法--路径已经放进去了
Beego案例-新闻发布系统 1.注册 后台代码和昨天案例代码一致。,所以这里面只写一个注册的业务流程图。 **业务流程图 ** 2.登陆 业务流程图 登陆和注册业务和我们昨天登陆和注册基本一样,所以就不再重复写这个代码 但是我们遇到的问题是如何做代码的迁移&…...
Linux-CPU相关常用命令合集
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言一、cpu相关常用命令 二、cpuinfo 参数详细对照表 前言 本篇文章主要记录平时Linux-常用命令整理! 提示:以下是本篇文章正文内容&#…...
vue 百度地图/天地图设置铺满屏幕100%,解决空隙问题
设置100%无效,刷新依然右侧有空隙,解决:min-width: 100vw; <div class"aui-flex-col" style"width: 100%; height:100%"><div id"mapAllCon" style"width: 100%; min-width: 100vw; height: 10…...
第五章:最新版零基础学习 PYTHON 教程—Python 字符串操作指南(第六节 - Python 中字符串的逻辑运算符)
对于 python 中的字符串,布尔运算符(and、or、not)起作用。让我们考虑两个字符串,即 str1 和 str2,并在它们上尝试布尔运算符: Python3 str1 = str2 = geeks# 使用 repr 打印带引号的字符串# 返回 str1 print(repr(str1 and str2)) # 返回 str1 print(repr(str2 and…...
Bark Ai 文本转语音 模型缓存位置修改
默认缓存位置在:~/.cache 加入环境变量:XDG_CACHE_HOME,指定缓存位置 修改后新的位置为: D:\Ai\Bark\Bark Cache...
Docker 镜像的创建
目录 一、Docker镜像的创建 1、基于已有镜像创建 2、基于本地模板创建 3、基于dockerfile创建 3.1 dockerfile结构 3.2 构建镜像命令 二、镜像分层的原理 1、联合文件系统(UnionFS) 2、镜像加载的原理 三、Dockerfile 操作常用的指令 案例实验…...
【ORM】浅聊C#和Java的ORM底层框架
给自己一个目标,然后坚持一段时间,总会有收获和感悟! 国庆假期马上结束,闲暇时间,突然对Ado.Net这个词的由来感兴趣,然后就一顿复习了一遍,顺便也了解了下java关于ORM框架的底层是什么ÿ…...
windows redis 自启动 Redis服务无法启动报错1067问题
如果你的系统服务里面已经有redis服务并且无法启动,则使用下面的命令卸载此服务 ! 1、停止Redis服务: redis-server --service-uninstall 2、删除系统服务 sc delete redis 进入到你的Redis安装目录,我的在以下目录,谨记此时不…...
Ubuntu Server CLI专业提示
基础 网络 获取所有接口的IP地址 networkctl status 显示主机的所有IP地址 hostname -I 启用/禁用接口 ip link set <interface> up ip link set <interface> down 显示路线 ip route 将使用哪条路线到达主机 ip route get <IP> 安全 显示已登录的用户 w…...
Centos7升级OpenSSH9.1
最近遇到了服务器漏洞,需要对服务器的OpenSSH版本进行升级,查阅了相关资料,总结出了一套比较简单的方案。中间遇到的个别问题也进行了记录,供大家参考。 下载准备 从https://ftp.jaist.ac.jp/pub/OpenBSD/OpenSSH/portable/opens…...
linux——信号
目录 一.信号的保存 二.信号集操作 1.信号集 2.信号集操作函数 3.sigprocmask 4.sigpending 三. 信号的捕捉 1.内核态和用户态 2. sigaction 四.可重入函数 五.SIGCHLD信号 一.信号的保存 实际执行信号的处理动作称为信号递达(Delivery)。信号从产生到递达之间的状…...
存档&改造【03】Apex-Fancy-Tree-Select花式树的导入及学习
Apex-Fancy-Tree-Select git学习网页 GitHub - RonnyWeiss/Apex-Fancy-Tree-Select: Fancy Tree Plug-in for Oracle APEX 如何从其他应用程序导出已有插件到新应用程序中 1.从其他应用程序导出插件 其他应用程序-【共享组件】-【插件】-【任务 导出插件】-选择想要导出的…...
【单片机】14-I2C通信之EEPROM
1.EEPROM概念 1.EEPROM 1.1 一些概念 (1)一些概念:ROM【只读存储器---硬盘】,RAM【随机访问存储器--内存】,PROM【可编程的ROM】,EPROM【可擦除ROM】,EEPROM【电可擦除ROM】 1.2 为什么需要EE…...
Mini-dashboard 和meilisearch配合使用
下载的meilisearch一般是development模式,内置客户端,修改客户端后需要重要全部编译,花时间太长了。前后端分离才是正道,客户端修改不用重新编译后端。 方法如下: 1、修改配置文件/etc/meilisearch.toml,…...
leetcode 886. 可能的二分法
给定一组 n 人(编号为 1, 2, …, n), 我们想把每个人分进任意大小的两组。每个人都可能不喜欢其他人,那么他们不应该属于同一组。 给定整数 n 和数组 dislikes ,其中 dislikes[i] [ai, bi] ,表示不允许将…...
Elasticsearch:使用 ELSER 文本扩展进行语义搜索
在今天的文章里,我来详细地介绍如何使用 ELSER 进行文本扩展驱动的语义搜索。 安装 Elasticsearch 及 Kibana 如果你还没有安装好自己的 Elasticsearch 及 Kibana,请参考如下的链接来进行安装: 如何在 Linux,MacOS 及 Windows 上…...
OpenRadar DOA函数 Bartlett/CBF和Capon使用
Bartlett / CBF原理看这里 Capon原理看这里 这里只讲怎么调用openradar提供的aoa_bartlett和aoa_capon函数: 一些吐槽:虽然看起来openradar的作者代码水平很高,但里面有很多匪夷所思的写法,比如他demo里的解析文件格式就很迷啊等…...
二叉树--翻转二叉树
文章前言:如果有小白同学还是对于二叉树不太清楚,作者推荐:二叉树的初步认识_加瓦不加班的博客-CSDN博客 给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。 如果思路不清楚,请看动态页面&am…...
wordpress把logo变大/宁德市是哪个省
python环境 1.安装 pyenv. 用来切换各个python版本 pyenv的安装方式包括多种,重点推荐采用pyenv-installer的方式,原因主要有两点: a. 通过pyenv-installer可一键安装pyenv全家桶,后续也可以很方便地实现一键升级(pyenv update)&a…...
廊坊智能模板建站/seopc流量排行榜企业
先写完,到时再贴图吧1、升级到域控制器:注意需要有静态IP地址,并且安装DNS服务。2、安装WINDOWS组件:IIS,SMTP,NNTP,ASP.NET;3、用exchange光盘工具进行森林扩展和域扩展,…...
雅虎网站提交入口/好的seo平台
很多企业为方便网络管理,同时为了提高登录速度,配置局域网,并为局域网中的每台电脑都指定了IP地址。但是在Windows环境下其他用户很容易修改IP地址配置,这样就很容易造成 IP地址冲突等故障,不利于网络的正常管理。因此…...
外国人做汉字网站/网络优化工程师
我们一般情况下使用集合,都是在单线程的情况下,但是如果是多线程呢?会出现什么样的结果呢? 下面的代码,在多线程的情况下输出报出异常 Exception in thread “6” java.util.ConcurrentModificationException 原因在于…...
网站后台添加关键词/seo关键词优化软件合作
在Eclipse中关联源代码 2015-05-22 14:31:26| 分类: 编程IDE|举报|字号 订阅 下载LOFTER我的照片书 |在使用Eclipse的时候,为了查看一些Java代码的具体实现,通常需要查看一些源代码。但是有些时候都是我们使用到了某个类,想查…...
做网站的数据库/搜索引擎优化要考虑哪些方面?
1 新建一个项目:TCPServer.pro A 改动TCPServer.pro,注意:假设是想使用网络库。须要加上network SOURCES \ TcpServer.cpp \ TcpClient.cpp HEADERS \ TcpServer.h \ TcpClient.h QT gui widgets network CONFIG C11 B 新…...