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

    文章

    3642

    浏览量

    94098
  • 异步
    +关注

    关注

    0

    文章

    62

    浏览量

    18115
  • python
    +关注

    关注

    56

    文章

    4811

    浏览量

    85105
收藏 人收藏

    评论

    相关推荐

    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的优点

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

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

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

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

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

    蚁群算法python编程实现

    本文主要介绍了Python编程实现蚁群算法详解,涉及蚂蚁算法的简介,主要原理及公式,以及Python
    发表于 02-02 10:36 7505次阅读
    蚁群算法<b class='flag-5'>python</b><b class='flag-5'>编程</b><b class='flag-5'>实现</b>

    Python的asyncio怎么样使用

    Python异步编程功能(简称async)让你可以编写不必等待独立任务完成就可以完成更多工作的程序。
    发表于 03-18 13:48 1292次阅读

    Python编程入门讲解PPT

      Python是一种简单易学,功能强大的编程语言。它有高效率的高层数据结构,能够简单、有效地实现面向对象编程Python语法简洁,支持动态
    发表于 07-08 10:43 35次下载
    <b class='flag-5'>Python</b><b class='flag-5'>编程</b>入门讲解PPT

    蜂鸣器播放音乐设计与实现源码

    蜂鸣器播放音乐设计与实现源码
    发表于 04-24 11:00 90次下载
    蜂鸣器播放音乐设计与<b class='flag-5'>实现</b>(<b class='flag-5'>附</b><b class='flag-5'>源码</b>)

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

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

    基于51单片机的图书管理系统实现与设计(源码)

    基于51单片机的图书管理系统实现与设计(源码)
    发表于 04-26 10:52 18次下载

    抽样Python是如何实现

    今天来和大家聊聊抽样的几种常用方法,以及Python是如何实现的。
    的头像 发表于 08-05 10:59 1270次阅读

    怎么Python实现截图功能

    操作。 今天Python实用宝典就来讲讲怎么Python实现截图功能,以下教程默认您已经安装好了Py
    的头像 发表于 11-03 15:32 1029次阅读
    怎么<b class='flag-5'>在</b><b class='flag-5'>Python</b><b class='flag-5'>中</b><b class='flag-5'>实现</b>截图功能