京公网安备 11010802034615号
经营许可证编号:京B2-20210330
作者:小K
来源:麦叔编程
❝
上次的关于进程、线程和协程的文章,很多粉丝留言表示想看协程的实际案例。
❞
❝
那么今天就来结合代码实际讲一个协程的实际应用。
在此之前,我希望大家能已经理解什么是串行、并行和并发的概念。如果你还不知道这三者的区别请前往Python三分钟第131篇复习学习。
❞
定义一个洗衣服函数,洗衣服过程时间为2秒。
睡眠
import timedef wash_clothes(): time.sleep(2) # 洗衣服def run(): for i in range(20): wash_clothes() print(f"衣服洗好了!当前时间:{time.time()}") if __name__ == '__main__': run()
运行结果:
衣服洗好了!当前时间:1659618457.003896衣服洗好了!当前时间:1659618459.005437衣服洗好了!当前时间:1659618461.0056782衣服洗好了!当前时间:1659618463.010311衣服洗好了!当前时间:1659618465.013951衣服洗好了!当前时间:1659618467.018253衣服洗好了!当前时间:1659618469.022136衣服洗好了!当前时间:1659618471.022881衣服洗好了!当前时间:1659618473.023118衣服洗好了!当前时间:1659618475.027102衣服洗好了!当前时间:1659618477.030786衣服洗好了!当前时间:1659618479.032495衣服洗好了!当前时间:1659618481.037195衣服洗好了!当前时间:1659618483.040722衣服洗好了!当前时间:1659618485.041149衣服洗好了!当前时间:1659618487.046405衣服洗好了!当前时间:1659618489.0484421衣服洗好了!当前时间:1659618491.050224衣服洗好了!当前时间:1659618493.055479衣服洗好了!当前时间:1659618495.0585659
我们可以看出,函数间隔2秒多一点点输出一次时间。
注意代码中注释
import timeimport asyncio# 异步函数定义需要在def前加async前缀async def wash_clothes(): # sleep也需要使用协程专用的模块支持,同步的库不能在异步中使用 asyncio.sleep(2) print(f"衣服洗好了!当前时间:{time.time()}")def run(): for i in range(20): # 将协程函数注册到loop(循环事件)中 loop.run_until_complete(wash_clothes())# 创建一个协程loop(循环事件)中loop = asyncio.get_event_loop()if __name__ =='__main__': run()
运行结果:
衣服洗好了!当前时间:1659619085.0939178衣服洗好了!当前时间:1659619085.094379衣服洗好了!当前时间:1659619085.095523衣服洗好了!当前时间:1659619085.095926衣服洗好了!当前时间:1659619085.097046衣服洗好了!当前时间:1659619085.0985332衣服洗好了!当前时间:1659619085.099058衣服洗好了!当前时间:1659619085.099848衣服洗好了!当前时间:1659619085.101115衣服洗好了!当前时间:1659619085.101917衣服洗好了!当前时间:1659619085.1026182衣服洗好了!当前时间:1659619085.103351衣服洗好了!当前时间:1659619085.1034582衣服洗好了!当前时间:1659619085.1035311衣服洗好了!当前时间:1659619085.1042402衣服洗好了!当前时间:1659619085.1052392衣服洗好了!当前时间:1659619085.106337衣服洗好了!当前时间:1659619085.106577衣服洗好了!当前时间:1659619085.107519衣服洗好了!当前时间:1659619085.108191
从运行结果看出,20桶衣服几乎在同0.1秒内洗完了。
❝
重点:协程函数内不能使用同步的函数或模块,否则将不会被异步运行。
❞
上一篇Python我提了协程执行的过程就像,“一个人启动一台洗衣机后,马上去使用第二台洗衣机,再第三台...第四台...第十台”。
「当洗衣机启动后的状态就等于是挂起了」
然后协程马上去启动下一台洗衣机...一直到结束。
在某种意义上说,处理IO密集型任务协程的速度会高于多线程,因为线程的创建和销毁需要消耗更多资源。
如果将这个大杀器用于网络爬虫,那不是速度要上天了?
是的,协程爬虫超猛。以前亲测比scrapy要快。
下期将从两个话题中选出一个:
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
Python凭借简洁的语法、丰富的生态库,成为算法开发、数据处理、机器学习等领域的首选语言。但受限于动态类型、解释性执行的特性 ...
2026-04-03在深度学习神经网络中,卷积操作是实现数据特征提取的核心引擎,更是让模型“看懂”数据、“解读”数据的关键所在。不同于传统机 ...
2026-04-03当数字化转型从企业的“战略口号”落地为“生存之战”,越来越多的企业意识到,转型的核心并非技术的堆砌,而是数据价值的深度挖 ...
2026-04-03在日常办公数据分析中,数据透视表凭借高效的汇总、分组功能,成为Excel、WPS等办公软件中最常用的数据分析工具之一。其中,“计 ...
2026-04-02在数字化交互的全场景中,用户的每一次操作都在生成动态的行为轨迹——电商用户的“浏览商品→点击详情→加入购物车”,内容APP ...
2026-04-02在数字化转型深度推进的今天,企业数据已成为驱动业务增长、构建核心竞争力的战略资产,而数据安全则是守护这份资产的“生命线” ...
2026-04-02在数据驱动决策的浪潮中,数据挖掘与数据分析是两个高频出现且极易被混淆的概念。有人将二者等同看待,认为“做数据分析就是做数 ...
2026-04-01在数据驱动决策的时代,企业与从业者每天都会面对海量数据——电商平台的用户行为数据、金融机构的信贷风险数据、快消品牌的营销 ...
2026-04-01在数字化转型的浪潮中,企业数据已从“辅助运营的附属资源”升级为“驱动增长的核心资产”,而一套科学、可落地的企业数据管理方 ...
2026-04-01在数字化时代,每一位用户与产品的交互都会留下可追溯的行为轨迹——电商用户的浏览、加购、下单,APP用户的注册、登录、功能使 ...
2026-03-31在日常数据统计、市场调研、学术分析等场景中,我们常常需要判断两个分类变量之间是否存在关联(如性别与消费偏好、产品类型与满 ...
2026-03-31在CDA(Certified Data Analyst)数据分析师的职场实战与认证考核中,“可解释性建模”是核心需求之一——企业决策中,不仅需要 ...
2026-03-31多层感知机(MLP,Multilayer Perceptron)作为深度学习中最基础、最经典的神经网络模型,其结构设计直接决定了模型的拟合能力、 ...
2026-03-30在TensorFlow深度学习实战中,数据集的加载与预处理是基础且关键的第一步。手动下载、解压、解析数据集不仅耗时费力,还容易出现 ...
2026-03-30在CDA(Certified Data Analyst)数据分析师的日常工作中,“无监督分组、挖掘数据内在聚类规律”是高频核心需求——电商场景中 ...
2026-03-30机器学习的本质,是让模型通过对数据的学习,自主挖掘规律、实现预测与决策,而这一过程的核心驱动力,并非单一参数的独立作用, ...
2026-03-27在SQL Server数据库操作中,日期时间处理是高频核心需求——无论是报表统计中的日期格式化、数据筛选时的日期类型匹配,还是业务 ...
2026-03-27在CDA(Certified Data Analyst)数据分析师的能力体系与职场实操中,高维数据处理是高频且核心的痛点——随着业务场景的复杂化 ...
2026-03-27在机器学习建模与数据分析实战中,特征维度爆炸、冗余信息干扰、模型泛化能力差是高频痛点。面对用户画像、企业经营、医疗检测、 ...
2026-03-26在这个数据无处不在的时代,数据分析能力已不再是数据从业者的专属技能,而是成为了职场人、管理者、创业者乃至个人发展的核心竞 ...
2026-03-26