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.Python2在线工具菜鸟工具Python2 在线工具 AI 编程工具 复制 清空 下载 1 # -*- coding: UTF-8 -*- 2 # Write Python 2 code in this online editor and run it. 3 print 'Hello World!' Hello World!Copyright ? JYSHARE.COM 2024 备案号:闽ICP备12019840号-4 https://c.runoob.com/compile/6/
2.Python爬虫基础python爬虫基础文档(三)面向对象编程 (四)文件读写 二、爬虫流程 (一)HTTP协议 (二)HTML网页结构 (三)bs4 解析网页内容 (四)爬虫小试 学习资源 Python+爬虫 爬虫实战案例 AI学堂爬虫教学 一、Python基础回顾 (一)变量类型 可变类型:可以进行添加、修改、删除 (列表、字典…) 不可变类型:不可以进行上述操作 (数字、字符串、元https://blog.csdn.net/Taylor_Kurt/article/details/135679818
3.python编程网页版Python编程语言是一种高级编程语言,它简单易学、功能强大、可扩展性好,已成为人工智能、数据科学、Web开发、游戏开发等领域的热门语言。Python编程网页版是一个在线学习Python编程的平台,它提供了丰富的课程、交互式编程环境、社区问答等功能,是学习Python编程的最佳选择。 https://www.jdynew.com/help/index.php/zenme/6194.html
4.python在线运行编程工具模板源码[网页版]网页版Python在线运行编程工具模板, 使用 Javascript 模拟的,有可能和 CPython 有区别,但足够用了! 左边写代码,右边实时显示运行效果,可保存、下载代码。 模板功能: 适用于 Python 教学 编辑Python 代码,并输出结果(支持 Turtle 海龟图) 支持清晰地截图代码及结果 支持保存代码和下载代码(.py文件需选择保留) 静态页https://weibo.com/ttarticle/p/show?id=2309404675701126332575
5.《写给系统管理员的Python脚本编程指南》笔记第1章 Python脚本编程概述 第2章 调试和分析Python脚本程序 第3章 单元测试框架简介 第4章 自动化常规管理活动 4.6 读取配置文件 ConfigParser模块,用于读取配置文件 4.7 向脚本添加日志记录和警告代码 logging模块用于跟踪程序中发生的事件,warnings模块用于警告程序员关于语言和程序库中所做的更改。 https://www.jianshu.com/p/aac939bca275
6.编程猫海龟编辑器海龟编辑器是编程猫自主研发的图形化Python编辑器,可以搭积木,学Python。https://wood.codemao.cn/
7.Python3.7编程快速入门中文PDF完整版电子书下载随着人工智能时代的到来,Python已经成为主流开发语言。Python3.7编程快速入门就是针对完全零基础入门的读者,采用最小化安装+极简代码的教学方式,让读者学练结合,达到入门Python与网络爬虫编程的目的。 分为16章,从Python版本的演化、环境的搭建开始,逐步介绍Python 3.7语言的语法基础,包括内置类型、流程控制、函数、类和对https://www.jb51.net/books/779852.html
8.Python程序设计第2版董付国PDF下载Java知识分享网第8章讲解异常处理结构以及Python程序的调试与测试方法;第9章讲解标准库tkinter和扩展库wxPython的GUI应用;靠前0章讲解网络编程,网页内容读取,Web应用开发;靠前1章介绍MapReduce和Hadoop编程;靠前2章讲解注册表编程、GUI编程以及系统运维编程;靠前3章讲解多线程与多进程编程;靠前4章介绍SQLite、Access、MS SQL Serverhttp://www.java1234.com/a/javabook/python/2024/0510/25283.html
9.12种最常用的网页编程语言简介如今,随着网站的越来越普及,与Web相关的开发技术持续热门,从前端到后端,从标记语言到开发语言,各种技术交相辉映,沉沉浮浮,从开始简单的HTML到复杂的Web开发语言asp、asp.net、php、jsp等等,在此,百恒网络给大家简单的介绍一下常见的12种网页编程语言。 https://www.jxbh.cn/article/2300.html
10.Python教程[完整版].pdf在 Windows 上写Python 程序,放到Linux 上也是能够运行的。 要开始学习Python 编程,首先就得把Python 安装到你的电脑里。安装后,你会得到 Python 解释器(就是负责运行Python 程序的),一个命令行交互环境,还有一个简单的 集成开发环境。 2.x 还是3.x Python 2.x 3.x 目前, 有两个版本,一个是 版,一个是https://m.book118.com/html/2018/0329/159236339.shtm
11.Python计算机程序设计语言Python下载v3.8.0官方版在计算机内部,Python解释器把源代码转换成称为字节码的中间形式,然后再把它翻译成计算机使用的机器语言并运行。这使得使用Python更加简单。也使得Python程序更加易于移植。 面向对象:Python既支持面向过程的编程也支持面向对象的编程。在“面向过程”的语言中,程序是由过程或仅仅是可重用代码的函数构建起来的。在“面向对象https://www.wmzhe.com/soft-73721.html
12.Python编程快速上手——让繁琐工作自动化本书中文简体字版由美国No Starch出版社授权人民邮电出版社出版。未经出版者书面许可,对本书任何部分不得以任何方式复制或抄袭。 版权所有,侵权必究。内容提要 如今,人们面临的大多数任务都可以通过编写计算机软件来完成。Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。通过Python编程,我们能够解决现实生https://labs.epubit.com/bookDetails?id=N29437
13.Python编程:从入门到实践(第3版)全书分两部分:第一部分介绍用Python编程所必须了解的基本概念,包括强大的Python库和工具,以及列表、字典、if语句、类、文件和异常、代码测试等内容;第二部分将理论付诸实践,讲解如何开发三个项目,包括简单的2D游戏、利用数据生成交互式的信息图以及创建和定制简单的Web应用,并帮助读者解决常见编程问题和困惑。第3版进行https://www.ituring.com.cn/book/3038
14.Python程序设计教程(2024版)Python程序设计教程(2024版) 讲师:燎原 详情目录 共160小节 已有100681人学过2024.3.5推出 本课程为2024新版,为了适应新的开发需求,特别是AI工具,课程选用了python3.12版本,并使用Pycharm作为开发工具,代码调试更便捷,启用新案例,且新增了web开发入门,装饰器、文件指针、GIL等一系列细节知识点,新增AI辅助编程、编程https://m.51zxw.net/MobileWeb/CourseDetails?cid=1310
15.Python编程基础数字图书馆灯塔第1 章 Python 概述 1.1 初识Python 1.1.1 什么是Python 1.1.2 Python 的特点 1.1.3 Python 各版本之间的差异 1.2 开始Python 编程 1.2.1 下载和安装Python 1.2.2 执行Python 脚本文件 1.2.3 Python 语言的基本语法 1.2.4 下载和安装Pywin32 1.3 Python 自带文本编辑器IDLE 的使用方法 https://www.dtdjzx.gov.cn/szlib/jykj/2825229.jhtml
16.python网页在线编程并运行python网页运行python网页在线编程并运行 python 网页运行 Python学习(四) ———自动化启动运行第一个网页 web自动化环境搭建(python+selenium+webdriver) 一、 准备 浏览器:Chrome 系统环境:Win10 编译工具:Pycharm 自动化工具为:selenium+webdriver 1.1安装pip工具 1.打开cmd,输入:pip,出现如下图界面,说明pip环境OK.https://blog.51cto.com/u_16213711/8214652
17.Python视频教程——我爱自学网本教程适合零基础或者刚刚步入编程的学员,学习当下热门的python编程,带您进入编程世界。教程结合讲师多年教学经验和学习总结,旨在给大家提供一个明确的学习思路和方法,重点锻炼编程思维,不用死记硬背代码,轻轻松松学编程。http://www.52zxw.com/kecheng_192.html
18.Python编程(豆瓣)图灵程序设计丛书·Python系列(共54册), 这套丛书还有 《零压力学Python》《Python基础教程(第3版·修订版)》《编程导论》《Python数据科学入门》《深入理解Python特性》 等。 喜欢读"Python编程"的人也喜欢的电子书· ··· 支持Web、iPhone、iPad、Android 阅读器 机器学习https://book.douban.com/subject/26829016
19.推荐5个边玩python边学习的网站!腾讯云开发者社区https://codingbat.com/python 一个英文的在线编程站点,也都是一些基础的语法和练习,可以选择 Java 和 Python,短时间内就可以做很多的挑战。 如果遇到了困难,点“solution”就会有参考提示。 3、Coding Bat CodeCombat 是一款网页编程游戏。当你打开 CodeCombat 网站,外观看起来就像是一个魔兽争霸风格的线上游戏,而且https://cloud.tencent.com/developer/news/665212