0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

在Python中实现异步编程(附源码)

如意 来源:读芯术微信公众号 作者:读芯术微信公众号 2020-10-27 14:36 次阅读

异步编程是并行编程的一种方式。单个工作单元独立于主应用程序线程运行,并通知调用线程其完成、失败情况或进度。下面这张图理解起来会更直观一些:

在Python中实现异步编程(附源码)

同步vs异步

同步编程很普遍。如图,请求1被发出后等待响应1;一旦得到响应1就发出请求2,然后等待它的响应。在上面的代码中,向函数传递参数“a”后等待函数返回更改后的值,然后再次调用以更改数字,最后再次得到响应,这就是同步编程。

而对于异步编程来说,请求1被发出后,无需等响应1便可直接发出请求2。两个请求完成后得到两个响应。简单地说就是请求1和请求2是并行处理的,不等前一个请求的响应便提出新的请求。

简言之,只要打开任务管理器(macOS中的活动监视器)就能看到多个应用程序同步运行;或者一个Python Shell在两个不同的终端窗口中运行。专业术语叫做多进程(MultiProcessing),顾名思义,即不止一个进程在运行。

如何在Python中进行异步编程?

一个同步编程的示例代码如下:

在Python中实现异步编程(附源码)

以上代码的输出:

在Python中实现异步编程(附源码)

这段代码传递了for循环的范围。执行代码耗时长达13.843秒,因为r1的范围是5000,所以耗时久。现在的问题是,必须先待r1任务完成,否则无法得到r2和r3。可能在得到r1之前就得到r2和r3吗?答案是肯定的,这正是异步编程的用武之地。

首先用pip指令安装异步包。

pip install asyncio

安装后,看一下新代码。使用异步包:

在Python中实现异步编程(附源码)

首先观察该代码的输出,接下来讨论该代码:

在Python中实现异步编程(附源码)

输出-1

在Python中实现异步编程(附源码)

输出-2

输出-1中首先能得到t2和t3进程的结果,然后在输出-2的截图中得到了t1进程的结果,这是异步编程的功劳。t1进程耗时最长,所以它的结果最后产生,且t1、t2和t3进程均并行运行。异步编程的好处就在于不必等待任何进程的结果,便可获得下一个进程的结果。

让我们讨论一下此代码。

首先,在if __name__==“__main__”中定义了asyncio.get_event_loop(),并将这个循环作为处理循环事件的异步对象。然后创建一个main的例行程序,并设置条件:若main没完成则继续循环。每次异步,都要进行loop.close()的编程,否则结果就会错误或异常。

然后将函数定义为asyncdeffunc_name,这样解释器就知道函数用了异步的方法。在main()中定义了三个任务(也可称为子例程),并使用了await函数,以便它等待三个进程结束(即使它没有多大意义,也必须使用它)。

最后用了fun()函数。i %10000的if条件让最大范围的进程徐徐运行,最后得到了答案。仔细研究fun()函数并自己尝试的话,其中的逻辑会显得非常合理和直接。

在Python中实现异步编程,你学会了吗?
责编AJX

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 编程
    +关注

    关注

    88

    文章

    3438

    浏览量

    92321
  • 异步
    +关注

    关注

    0

    文章

    60

    浏览量

    17995
  • python
    +关注

    关注

    51

    文章

    4667

    浏览量

    83440
收藏 人收藏

    评论

    相关推荐

    xilinx ISE 异步FIFO ip的使用、仿真及各信号的讨论(图文教程)

    全部verilog源码)5.基于verilog的分频器设计 (可实现任意整数分频) (全部源码)6. 《ZedBoard高手之路》入门篇视频教程7. 《FPGA设计
    发表于 07-16 15:09

    Python编程语言可以应用在哪些方面?

    领域,Python几乎是霸主地位,将网络一切数据作为资源,通过自动化程序进行有针对性的数据采集以及处理。从事该领域应学习爬虫策略、高性能异步IO、分布式爬虫等,并针对Scrapy框架源码进行深入剖析
    发表于 02-05 17:50

    python有哪些方向?

    框架源码进行深入剖析,从而理解其原理并实现自定义爬虫框架。4. 云计算开发Python是从事云计算工作需要掌握的一门编程语言,目前很火的云计算框架OpenStack就是由
    发表于 03-09 15:47

    5种Python实现方式详解

    使用CPython吧。JythonJythonJVM上实现Python,由Java编写。Jython将Python源码编译成JVM字节码
    发表于 05-22 15:52

    Python十大应用领域和就业方向

    领域,Python几乎是霸主地位,将网络一切数据作为资源,通过自动化程序进行有针对性的数据采集以及处理。从事该领域应学习爬虫策略、高性能异步IO、分布式爬虫等,并针对Scrapy框架源码进行深入剖析
    发表于 11-21 14:54

    为什么用python树莓派上编程?详解python的优点

    代码。树莓派python编程详解当你创建一个Python程序时,首先必须从编译器的环境退出来,并且打开一个文本编辑器,如emacs或者树莓派的Leafpad。
    发表于 05-21 08:47

    Python的线性编程:直接教程分享

      线性编程是最常见的优化技术之一。它具有广泛的应用范围,并且经常用于运筹学,工业设计,计划等,并且还在不断增加。Python的线性编程并没有像机器学习那样被大肆宣传,但是它是可以通
    发表于 09-11 17:55

    Python与其他编程语言有何不同?

    吸引力。  而且,Python的可靠性和效率赢得了机器学习和数据科学等快速发展的技术领域中工作的专业人员的喜爱。  总的来说  Python是一种通用的编程语言,它显然存在于自己的世
    发表于 09-16 15:54

    异步SRAM如何实现速度与功耗的完美平衡

    异步SRAM实现速度与功耗的完美平衡
    发表于 02-02 07:48

    windows下安装python linux下安装python masOS下安装python

    想要开始Python编程之旅,首先得自己使用的计算机上安装Python解释器环境,下面将以安装官方的Python解释器为例,讲解如何在不同
    发表于 06-11 16:59

    关于《Python编程入门系列教程》说明及教程汇总

    的初学者,也很容易上手。2、和其它编程语言相比,实现同一个功能,Python 语言的实现代码往往是最短的。也正因为python的这两大特点所
    发表于 06-23 10:10

    编程入门自学python视频

    编程入门自学python视频,(图书介绍:童晶:《Python趣味创意编程》新书预告)本章我们将实现简易毛笔字程序,读者可以按下鼠标按键移动
    发表于 07-20 07:42

    异步IO是什么

    in Python, evolving rapidly from Python 3.4 through 3.7, and probably beyond. 异步IO是一种并发编程设计
    发表于 09-06 07:26

    蚁群算法python编程实现

    本文主要介绍了Python编程实现蚁群算法详解,涉及蚂蚁算法的简介,主要原理及公式,以及Python中的实现代码,具有一定参考价值。
    发表于 02-02 10:36 7275次阅读
    蚁群算法<b class='flag-5'>python</b><b class='flag-5'>编程</b><b class='flag-5'>实现</b>

    浅析同步与异步Python的区别与概述

    你是否听到人们说过,异步Python代码比普通(或同步)Python代码更快?果真是那样吗?
    的头像 发表于 04-25 13:53 1926次阅读
    浅析同步与<b class='flag-5'>异步</b><b class='flag-5'>Python</b>的区别与概述