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入门教程(超详细)python入门教程(非常详细)Python的语法「简单」且「优雅」,相对于其他语言学习「难度较低」,入门非常快。 Python的上升趋势非常明显,20年来首次超过C语言和Java,成为「最受欢迎」的程序语言。 Python 0. Hello Python 许多PC和Mac默认已经安装了python,在cmd运行以下命令检查是否安装了python https://blog.csdn.net/a25847a/article/details/144321596
2.python编程入门零基础学习Python基础(附带最新免费教程)本篇是面向编程零基础学员的Python入门教程,内容涵盖了Python的基础知识和初步应用。以较轻快的风格,向零基础学习者介绍了一门时下比较流行的、并且用途比较广泛的编程语言。同时,其语法简洁而清晰,类库丰富而强大,非常适合于进行快速原型开发。另外,Python可以运行在多种系统平台下,从而使得只需要编写一次代码,就可以多https://www.jianshu.com/p/8ca9a1cbd342
3.Python编程:0基础到入门中文PDF完整版电子书下载Python编程:零基础到入门是一本针对所有层次的Python 读者而作的Python 入门教程,前腾讯高级开发工程师推荐入门教材,内容涉及Python基础、函数、面向对象编程、环境搭建等,适合Python编程零基础读者,需要的朋友可下载试试! 目录 第1章Python环境搭建 第2章Python基础 https://www.jb51.net/books/808012.html
4.Python编程语言零基础到精通教程共116节 Java趣味入门教程 邵发 基础入门 3.24万 共96节 Python办公自动化零基础教程 潮享李老师 基础入门 2.75万 共83节 计算机二级python语言教程 潮享李老师 中级提升 2.29万 共93节 C语言-从零开始详讲数据结构及算法 潮享李老师 中级提升 2.2万 第一章 Python运行环境搭建 第二章 Python语言基本https://www.yutu.cn/course/1888.html
5.Python零基础入门,轻松学习编程网络教程Python作为一种简单易学、功能强大的编程语言,已经成为许多初学者的首选。本文将为您详细介绍Python零基础入门的步骤和技巧,帮助您轻松开启编程之旅。 一、Python简介 Python是一种解释型、面向对象的编程语言,由Guido van Rossum于1989年发明。它具有语法简洁、易于阅读、可移植性强等特点,广泛应用于Web开发、数据分析https://blog.yyzq.team/post/461275.html
6.Python编程入门教程:从零开始学习PythonPython编程入门教程:从零开始学习Python 概述 Python编程是一种高级编程语言,由Guido van Rossum在1989年底开始设计,发布于1991年。这门语言的设计哲学强调代码的可读性,并且程序的结构尽可能地清晰明了,非常适合编程初学者。Python拥有强大的库支持,可以处理多种任务,如Web开发、数据分析和人工智能等。https://www.imooc.com/article/364042
7.笨鸟编程提供各种python相关的教程给想要学习python的小伙伴https://benniao365.com/
8.python基础教程python语言入门python基础入门教程频道:精选了多部python编程入门课程,分为高清视频教程、图文教程、在线手册等多种形式,欢迎在线学习!https://www.py.cn/course/list/97.html
9.零基础入门学习Python本系列教程面向零基础的同学,是一个深入浅出,通俗易懂的Python3视频教程。前半部分主要讲解Python3的语法特性,后半部分着重讲解Python3在爬虫、https://study.163.com/course/introduction/378003.htm
10.Python编程基础入门教学视频全集(全69集)本套Python基础教程共69课,带你零基础入门学习Python。主要介绍了Python的基础知识如变量、函数等。再介绍关系型数据库MYSQL的操作,最后通过实例讲解Python爬虫、NumPy基本操作、Pandas基本操作、泰坦尼克数据处理与分析。 教程目录 Python基础入门-001-Python介绍(一)Python基础入门-002-Python介绍(二) http://www.xg51.net/video-down.asp?id=1271
11.Python基础教程(第3版)中英双版+Python编程:从入门到实践(附源码Python基础教程(第3版)中英双版+Python编程:从入门到实践(附源码)非扫描版带书签 两本都是面向零基础的,新手可以看看。资源来源于网络,有能力可以到图灵社区购买纸质书,纸质的看着更舒服不是吗,废话不多说,直接上 扫码或添加微信号:坛友素质互助 「经管之家」APP:经管人学习、答疑、交友,就上经管之家! https://bbs.pinggu.org/jg/kaoyankaobo_kaoyan_6308121_1.html
12.零基础python教程—python数组腾讯云开发者社区零基础python教程—python数组 在学习Python过程中数组是个逃不过去的一个关,既然逃不过去咱就勇敢面对它,学习一下python中数组如何使用。 1、数组定义和赋值 python定义一个数组很简单,直接 arr = [];就可以了,arr就被定义成了一个空数组,只不过这个数组是没有任何值的,我们接下来给arr这个数组赋值看看,arr =https://cloud.tencent.com/developer/article/1556798
13.Python入门学习教程.pdf课后配套练习 : crossin的编程教室基础练习 课外练习 :笨办法学Python 这是本很有名的 Python 书籍,但并不适合纯零基础?学。因为其中重实践但不解释,新?很容易看得?头雾?。作为学习同时的辅助倒更合 适。 其他推荐教程 《?与?的编程之旅》 ?名 《与 https://max.book118.com/html/2023/0812/8133004061005120.shtm
14.python基础教程python教程下载python自学教程python教程专题是由绿色资源网站免费提供的教学文档。包括python学习手册、python开发实战、python入门经典等一系列免费的电子书教程。所有教程均为PDF文件高清扫描版,通过图文结合,为python学员们提供清晰的教程步骤,自学python的朋友可以来本站下载使用。而且整理了很多有关于python学习相关的学习资料,相信有需要的人会有http://www.downcc.com/k/pythonjiaocheng/
15.python精研课Python入门Python入门教程章节1:Python入门(动画版) 必学 1:python是什么_应用范围 免费试学 39346人6分55秒 必学 2:必须听的正确学习方法 免费试学 8301人17分48秒 必学 3:python环境的安装 免费试学 19423人4分32秒 必学 4:pycharm软件的下载和安装 13819人6分35秒 https://www.itbaizhan.com/stages/id/17
16.Python编程(第3版)(豆瓣)【自学神器】真正零基础,自学超轻松,附赠学习路线图 【品质提升】精雕细琢,邀请20位一线开发人员审读全书 ◎ 内容简介 本书是针对所有层次的 Python 读者而作的 Python 入门书。全书分为两部分:第一部分介绍使用Python 编程所必须了解的基本概念,包括强大的 Python 库和工具,以及列表、字典、if 语句 https://book.douban.com/subject/36365320/
17.0基础python编程基础入门学习方法python编程基础入门先从简单的python项目开始,一步一步,踏踏实实的前进,python编程对零基础的小白特别友好,如果你也想学习python编程,你可以自学,也可以参加python培训机构进行学习,八维职业学校作为一个有二十八年经验的python培训机构,对于python培训有着成熟的课程体系,老师全程答疑解惑,后期就业指导,让你更快更好的掌https://www.bwie.com/jsgh/12.html
18.Python编程完全入门教程这是一本经典的Python入门教材。《Python编程完全入门教程》采用螺旋式课程教学方法,使用Python编程语言来介绍“算法思维”的相关内容,让你不再“表面化”地学习Python编码,而是从根本上掌握解决问题的方法。 全书共39章,分为入门知识、Python基础、顺序控制结构、决策控制结构、循环控制结构、列表和子程序7个部分。书中https://labs.epubit.com/bookDetails?id=UB71ebb2cabbf32