Python异步编程入门

本文是写给JavaScript程序员的Python教程。

历史上,Python并不支持专门的异步编程语法,因为不需要。

但是,多线程有"线程竞争"的问题,处理起来很复杂,还涉及加锁。对于简单的异步任务来说(比如与网页互动),写起来很麻烦。

Python3.4引入了asyncio模块,增加了异步编程,跟JavaScript的async/await极为类似,大大方便了异步任务的处理。它受到了开发者的欢迎,成为从Python2升级到Python3的主要理由之一。

asyncio模块最大特点就是,只存在一个线程,跟JavaScript一样。

由于只有一个线程,就不可能多个任务同时运行。asyncio是"多任务合作"模式(cooperativemultitasking),允许异步任务交出执行权给其他任务,等到其他任务完成,再收回执行权继续往下执行,这跟JavaScript也是一样的。

表面上,这是一个不合理的设计,明明有多线程多进程的能力,为什么放着多余的CPU核心不用,而只用一个线程呢?但是就像前面说的,单线程简化了很多问题,使得代码逻辑变得简单,写法符合直觉。

下面介绍asyncio模块最主要的几个API。注意,必须使用Python3.7或更高版本,早期的语法已经变了。

第一步,import加载asyncio模块。

importasyncio第二步,函数前面加上async关键字,就变成了async函数。这种函数最大特点是执行可以暂停,交出执行权。

asyncdefmain():第三步,在async函数内部的异步任务前面,加上await命令。

awaitasyncio.sleep(1)上面代码中,asyncio.sleep(1)方法可以生成一个异步任务,休眠1秒钟然后结束。

执行引擎遇到await命令,就会在异步任务开始执行之后,暂停当前async函数的执行,把执行权交给其他任务。等到异步任务结束,再把执行权交回async函数,继续往下执行。

第四步,async.run()方法加载async函数,启动事件循环。

asyncio.run(main())上面代码中,asyncio.run()在事件循环上监听async函数main的执行。等到main执行完了,事件循环才会终止。

下面是async函数的例子,新建一个脚本async.py,代码如下。

#!/usr/bin/envpython3#async.pyimportasyncioasyncdefcount():print("One")awaitasyncio.sleep(1)print("Two")asyncdefmain():awaitasyncio.gather(count(),count(),count())asyncio.run(main())上面脚本中,在async函数main的里面,asyncio.gather()方法将多个异步任务(三个count())包装成一个新的异步任务,必须等到内部的多个异步任务都执行结束,这个新的异步任务才会结束。

脚本的运行结果如下。

作为对比,下面是这个例子的同步版本sync.py。

#!/usr/bin/envpython3#sync.pyimporttimedefcount():print("One")time.sleep(1)print("Two")defmain():for_inrange(3):count()main()上面脚本的运行结果如下。

最后是一个异步编程的真实例子:操作无头浏览器。异步编程对代码的简化,在这个例子体现得淋漓尽致。

$python3-mpipinstallpyppeteer然后,写一个网页截图脚本screenshot.py。

执行这个脚本,当前目录下就会生成截图文件example.png。

(正文完)

Python是当下最火的编程语言,房地产大佬潘石屹都说要学。

不过,要写出更复杂的应用,或者从事数据分析、机器学习、Web开发等工作,就需要正规系统的学习了。建议从一个简单的小项目开始,然后不断完善功能,去学习更多新东西。

完成以上四步,就从一个初级Python使用者成长为一名熟练工了。当然说起来简单,真正实践起来并不容易。每一步都会有比较多的坑,对于没有经验的人来说,自学效率比较低。如果有一个经验丰富的老师带,效果会好很多。

(完)

KevinBlandy说:

james说:

screenshot.py这个例子中,虽然五个步骤可以异步处理,但它们之间明显有前后关系。也可以吗?

乐亦栗说:

nodeserver说:

引用james的发言:screenshot.py这个例子中,虽然五个步骤可以异步处理,但它们之间明显有前后关系。也可以吗?

zhaifg说:

"下面介绍asyncio模块最主要的几个API。注意,必须使用Python3.7或更高版本,早期的语法已经变了。"这个地方应该是从Python3.5起加入了await,不是3.7

softbase说:

这个栗子说明了什么呢?比起同步线程有任何优势吗?还是仅仅为了说明语法。

Pelops.Yao说:

那几张配图真好看!

花满楼说:

引用zhaifg的发言:"下面介绍asyncio模块最主要的几个API。注意,必须使用Python3.7或更高版本,早期的语法已经变了。"这个地方应该是从Python3.5起加入了await,不是3.7

没有说*await*,asyncio.run()是3.7才加上的

screamff说:

主要要自己分辨哪些方法、函数能用asyncio,哪些不能,比如requests就不能用原生asyncio,老司机用起来才会轻车熟路一点

kiwiyan说:

哈哈,虽然带硬广,但对初学者的指导作用还是不错的

yangzx说:

引用screamff的发言:主要要自己分辨哪些方法、函数能用asyncio,哪些不能,比如requests就不能用原生asyncio,老司机用起来才会轻车熟路一点

QAQ说:

ponder说:

asyncio模块最大特点就是,只存在一个线程-------------------------------------------

这里确切地说,只有一个eventloop线程,threading.Thread还是能正常使用的。

Jason说:

gaspar08说:

正是因为有前后关系,才用到await

MakaBaka说:

featue说:

本来也觉得没什么卵用,直到我去掉async和await后,一运行就报错了。~~~~

THE END
1.Python的在线教育学习平台该Python的在线教育学习平台基于B/S架构,后端采用Django框架,前端采用Bootstrap等技术,并结合MySQL数据库。该系统分为系统管理员、前台用户两种角色: 前台用户角色的功能: 1)登录和注册 2)浏览机构信息 3)浏览信息 4)学习 5)收藏/取消收藏 系统管理员角色的功能: https://blog.csdn.net/2301_78251288/article/details/144325375
2.WelcometoPython.orgThe official home of the Python Programming Languagehttps://www.python.org/
3.Python在线编译器轻量且功能强大的PythonIDE自动配置Python 开发环境 无需下载Python开发环境,可直接在线编写代码 内置多种Python版本,满足不同项目的需要 存储准备就绪 语言版本 Python 3.10 Python 3.9 Python 3.8 Python 3.7 Python 2.7 开发环境准备就绪 云上托管 可以导入本地Python项目,使用云上 托管的开发环境 http://ide.kouda.cc/
4.在线编程Python123Python123 是面向新工科教学需求的计算机类基础课程教学辅助平台。支持全国计算机二级 python 考试自学与备考,还向合作教师与高校提供精品教学资源、全系列课程内容、全流程教学工具,支撑课程教学管理、练习、考试、教学研究等实际需求,为国家级、省部级一流课程提供教学https://www.python123.io/index/playground/python?ivk_sa=1025922x
5.北京邮电大学线上教学巡礼(三)——多彩课堂篇此次春季学期授课的教学内容,除了基本的教材和讲义,课题组老师们还利用网络上丰富的多媒体资源,插入关于计算机原理的动画演示以及著名科学家的报告节选,使在线教学更加灵活生动,使同学们对学科发展及未来研究产生进一步探索的兴趣。 为确保线上教学如期开展,老师们充分做好教学预案。使用爱课堂作为课程资料分享平台,同时建立https://www.bupt.edu.cn/info/1079/82209.htm
6.Python程序设计Python是最适合大数据与人工智能开发的编程语言,在后端开发、数据采集、数据分析、量化交易、运维开发、自动化测试等领域也有广泛的应用。 武汉理工大学赵广辉教授团队主持建设的“Python程序设计基础”为首批国家级一流本科课程,依托头歌平台开发的支持线上教学与线上实践的数字化课程旨在提高教学效果和提升学习https://www.educoder.net/paths/4751
7.python编程项目中线上问题排查与解决python因为业务上的设计存在问题,导致数据库表总是被锁,而且是不定期的锁定,导致服务器运行异常,今天就来跟大家说说该如何避免这种问题+ 目录 文| 極光来源:Python 技术「ID: pythonall」最近开发中遇到个小问题,因为业务上的设计存在问题,导致数据库表总是被锁,而且是不定期的锁定,导致服务器运行异常,最后经过排查原因https://www.jb51.net/article/226925.htm
8.python平台(几个不错的python接单路子)Python作为一门编程语言,一门技术,能够为我们所用,至少赚个外快是绝对没有问题的。 渠道一:淘宝搜python程序 可以到淘宝上搜,Python程序,到相应的店里找客服,就说你想做程序开发,给个联系方式。后面加的群多了,你做的单多了,做的好,会不断的有人拉你进群,可选择性会大大增加。 我今年写了大概30单,都是https://www.douban.com/group/topic/247026847/
9.Python编程快速上手2这是一本通过81个趣味小项目带你快速上手Python编程的书。如果你厌倦了循规蹈矩的教程,不妨尝试一下本书作者提倡的“做中学”方法,相信你会发现小项目程序对学习编程大有裨益。 这些项目涉及游戏、动画、数学、模拟、科学等类型,力求以最短小精悍的代码展现最丰富的创造力,以期带给读者趣味性和启发性。在了解程序https://www.epubit.com/bookDetails?id=UB7d76c57b46edc
10.线上学编程python哪个平台好?Worktile社区综上所述,一个好的线上学编程平台应该具备丰富的课程内容、优质的学习资源、灵活的学习方式、优秀的师资力量以及良好的学习支持和社群互动。基于这些因素,学员可以选择最适合自己的平台来学习编程。 在选择线上学习编程python的平台时,有很多因素需要考虑,例如平台的教学质量、课程内容的丰富程度、学习资源的可访问性等https://worktile.com/kb/ask/96702.html
11.北京市少儿python线上课程北京少儿Python在线课程vipcode网校创立了全新的线上教学体验模式,让孩子更好的跟来时舞动讨论学习。 在线学习 编程的学习过程只要电脑就可以在线完成;编程的学习结果通过电脑就可以直接验证。 04 学习python编程有什么好处 不断前进 可以使孩子们在学习的道路上走得越来越远。它提供的编程软件非常有趣。 https://www.qinxue365.com/course/706130.html
12.python能在什么平台使用python在什么平台能使用常见问题python能在什么平台使用 python是一种通用的编程语言,可以在多个平台上使用:1、windows操作系统;2、macos操作系统;3、linux操作系统;4、web服务器。 本教程操作系统:Windows10系统、Dell G3电脑。 Python是一种通用的编程语言,可以在多个平台上使用。以下是一些常见的平台:https://m.php.cn/faq/594203.html
13.2022年高等职业教育质量年度报告通知公告抽样调查数据体现了我校学生思想政治状况总体上表现为积极、健康、向上,总趋势呈现平稳状态,道德品质素养现状令人满意,基本职业素养和工匠精神入脑入心,思想意识主流符合国家和社会发展的需要。 1.1.2实践能力 2021-2022学年秋季学期,各二级学院组织2019级各专业各班级按照人才培养方案进行专业技能训练。教务处聘请校外https://www.hnkjxy.net.cn/html/809/2022-01-07/content-8186.html
14.Python中文网现在,你已经成功安装了 Python3,可以开始你的编程之旅了!如果你需要适用于其他版本或系统的安装包,可以在我的网站上找到最新的下载链接。 安装Python3 时,请注意以下几点: 添加环境变量:在 Windows 安装时,勾选“Add Python to PATH”,方便在命令行中直接使用python。 https://www.cnpython.com/
15.慧编程在线Python编程慧编程在线Python编辑器 0基础学编程 支持机器人编程与人工智能教学https://python.makeblock.com/
16.Python学习网Python编程语言学习、交流、培训平台,包含最新Python3基础教程、视频教程、技术动态及下载资源推荐等,欢迎自学!https://www.py.cn/
17.学点编程吧!以Python为核心实现多领域应用,创造高薪高效的学点编程吧,一个学习Python的交流平台!如果你在学习当中有任何疑问、学习心得、职业发展等内容欢迎在小站中分享,让我们共同进步和提高! 学点编程吧,期待你的光临!https://www.xdbcb8.com/
18.推荐几款非常火爆的Python在线编辑器!腾讯云开发者社区以上这些在线Python编辑器各有特色,无论是初学者还是专业开发人员,都可以在这些平台上找到适合自己的工具。它们不仅方便了我们的学习和工作,也促进了编程知识的普及和发展。 选择时可以根据个人的需求和偏好进行决定。例如,如果您是一个数据科学家,可能会倾向于使用Jupyter Notebook;而对于初学者来说,Python Fiddle和Pyhttps://cloud.tencent.com/developer/article/2416099
19.经典推荐!10款最好的Python编程IDE,总有一款适合你Atom是GitHub推出的跨平台文本编辑器,它实际上也可视作一款IDE,支持CSS、HTML、JavaScript等多种网页编程语言,并集成了文件管理器等众多实用功能。 对于初学者而言,Thonny无疑是一个理想的选择。它提供了逐步的帮助指南,让学习Python变得更加轻松愉快。 最后介绍的是IDLE,这是Python自带的基本IDE,虽然功能相对基础,但对https://www.yoojia.com/ask/17-13651380241327212391.html