iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python3 asyncio
  • 576
分享到

python3 asyncio

asyncio 2023-01-31 08:01:17 576人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

asyncio 是用来编写 并发 代码的库,使用 async/await 语法。asyncio 被用作多个提供高性能 python 异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等

asyncio 是用来编写 并发 代码的库,使用 async/await 语法。

asyncio 被用作多个提供高性能 python 异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等。

asyncio 往往是构建 IO 密集型和高层级 结构化 网络代码的最佳选择。

asyncio 提供一组 高层级 api 用于:

  • 并发地 运行 Python 协程 并对其执行过程实现完全控制;

  • 执行 网络 IO 和 IPC;

  • 控制 子进程;

  • 通过 队列 实现分布式任务;

  • 同步 并发代码;

此外,还有一些 低层级 API 以支持 库和框架的开发 实现:

  • 创建和管理 事件循环,以提供异步 API 用于 网络化, 运行 子进程,处理 OS 信号 等等;

  • 使用 transports 实现高效率协议;

  • 通过 async/await 语法 桥接 基于回调的库和代码。

 

关于asyncio的使用,请阅读以下2篇文章:

https://blog.csdn.net/SL_World/article/details/86597738

Https://blog.csdn.net/SL_World/article/details/86691747

 

写的非常不错,强烈推荐!!!

 

subprocess

需求

需要ping内网中的所有ip地址,是否都可以pnig通。

内网网段为:192.168.31.0/24

完整代码

test.py

#!/usr/bin/env python3coding: utf-8

import time
import subprocess
import asyncio
import re


async def ping_call(num):
    # 当前时间
    current_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime())
    ip = "192.168.31.%s" % num
    # 超时时间为1秒,ping 1次
    cmd = 'ping -c 1 -w 1 -W 1 %s' % ip
    print(cmd)
    # 执行命令
    proc = await asyncio.create_subprocess_exec('ping', '-c', '1','-w','1','-W','1', ip,
                                            stdout=asyncio.subprocess.PIPE)
    # print("proc",proc,type(proc))
    result = await proc.stdout.read()

    # 通过正则匹配是否有100%关键字
    regex = re.findall('100% packet loss', result.decode('utf-8'))
    # 长度为0时,表示没有出现100% packet loss
    if len(regex) == 0:
        return current_time,ip,True
    else:
        return current_time,ip,False


async def main():  # 调用方
    tasks = []
    for i in range(1, 256):
        # 把所有任务添加到task中
        tasks.append(ping_call(i))

    # 子生成器
    done, pending = await asyncio.wait(tasks)
    # done和pending都是一个任务,所以返回结果需要逐个调用result()
    for r in done:
        # print(r.result())
        # 判断布尔值
        if r.result()[2]:
            # 颜色代码
            color_code = 32
        else:
            color_code = 31

        info = "\033[1;{};1m{}\033[0m".fORMat(color_code, r.result())
        print(info)


if __name__ == '__main__':
    start = time.time()
    # 创建一个事件循环对象loop
    loop = asyncio.get_event_loop()
    try:
        # 完成事件循环,直到最后一个任务结束
        loop.run_until_complete(main())
    finally:
        # 结束事件循环
        loop.close()
    print('所有IO任务总耗时%.5f秒' % float(time.time() - start))

 

执行输出:

...
ping -c 1 -w 1 -W 1 192.168.31.11
...
('2020-04-20 18:18:21', '192.168.31.138', False)
('2020-04-20 18:18:21', '192.168.31.230', True)
('2020-04-20 18:18:21', '192.168.31.1', True)
('2020-04-20 18:18:20', '192.168.31.170', False)
...
('2020-04-20 18:18:20', '192.168.31.200', False)
所有IO任务总耗时1.93505秒

可以发现,花费时间为1.9秒。速度特别快!

如果同步执行,可能需要500多秒。

 

注意:subprocess模块,是调用asyncio.create_subprocess_exec,它返回一个asyncio生成器对象。

如果直接调用python自带的subprocess模块,是无法实现异步的。

 

本文参考链接:

https://GISt.GitHub.com/athoune/0736f73368fac38f066ac7cbf82ff5eb

http://codingdict.com/sources/py/asyncio/5789.html

 


--结束END--

本文标题: python3 asyncio

本文链接: https://www.lsjlt.com/news/193679.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • python3 asyncio
    asyncio 是用来编写 并发 代码的库,使用 async/await 语法。asyncio 被用作多个提供高性能 Python 异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等...
    99+
    2023-01-31
    asyncio
  • python3 使用 asyncio
    python3提供了协程专用的关键字async await, 还提供了asyncio库, 来进行异步非阻塞的io操作 异步非阻塞的io操作 没有老师检查我也不知道自己算不算完全懂了, 就不做无用功尝试说得通俗易懂了.想要从原理开始理解的话...
    99+
    2023-01-31
    asyncio
  • 怎么在python3协程中使用asyncio
    怎么在python3协程中使用asyncio?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Python主要用来做什么Python主要应用于:1、Web开发;2、...
    99+
    2023-06-14
  • 简单有效上手Python3异步asyncio问题
    目录Python3异步asyncio问题更新下面是学习过程中记录的偏低层实现的资料最基本的定义和应用什么时候使用异步并发和并行异步结果回调总结Python3异步asyncio问题 官...
    99+
    2023-01-03
    Python3异步asyncio Python3 asyncio Python3异步
  • Python 18.2 asyncio
    asyncioasyncio是python3.4版本引入的标准库,直接内置了对异步IO的支持。asyncio的编程模型就是一个消息循环。我们从asyncio模块中直接获取一个EventLoop的引用,然后把需要执行的协程扔到EventLoo...
    99+
    2023-01-31
    Python asyncio
  • asyncio之Coroutines,T
    Coroutines and Tasks属于High-level APIs,也就是高级层的api。 本节概述用于协程和任务的高级异步api。 Coroutines Coroutines翻译过来意思是协程,使用async/await语...
    99+
    2023-01-30
    asyncio Coroutines
  • Golang协程与 asyncio
    golang 协程和 python asyncio 都是并发编程工具。协程是轻量级线程,在同一线程并发运行;asyncio 使用事件循环处理 i/o 事件。golang 协程语法简洁,性...
    99+
    2024-04-15
    golang asyncio python
  • 浅谈Python协程asyncio
    一、协程 官方描述; 协程是子例程的更一般形式。 子例程可以在某一点进入并在另一点退出。 协程则可以在许多不同的点上进入、退出和恢复。 它们可通过 async def 语句来实现。...
    99+
    2024-04-02
  • python协程--asyncio模块(
    在高并发的场景下,python提供了一个多线程的模块threading,但似乎这个模块并不近人如意,原因在于cpython本身的全局解析锁(GIL)问题,在一段时间片内实际上的执行是单线程的。同时还存在着资源争夺的问题。python3.4...
    99+
    2023-01-30
    模块 python 协程
  • python3.6以上 asyncio模
    这是python3.6以上版本的用法,本例是python3.7.2编写使用asyncio模块的异步编程模型,生产这消费者,异步生产,用sleep来代替IO等待使用async和await语法来进行描述async关键字描述一个方法是异步函数(...
    99+
    2023-01-30
    asyncio
  • 用 uWSGI 来跑 asyncio
    最近关注的有点杂,所以也挺久没更新博客了。这一篇主要讨论这些技术:WSGI、py3k、werkzeug、asyncio、uWSGI、nginx。 先从最简单的开始说—— WSGI。根据定义,这是一种 web 服务器接口规范,源自 Pyt...
    99+
    2023-01-31
    uWSGI asyncio
  • 关于asyncio知识(一)
    一、介绍 asyncio 是python3.4 引入的一个新的并发模块,主要通过使用coroutines 和 futures 来让我们更容易的去实现异步的功能,并且几乎和写同步代码一样的写代码,还没有烦人的回调。 在2018年6月 3.7...
    99+
    2023-01-30
    知识 asyncio
  • Python标准模块--asyncio
    asyncio模块作为一个临时的库,在Python 3.4版本中加入。这意味着,asyncio模块可能做不到向后兼容甚至在后续的Python版本中被删除。根据Python官方文档,asyncio通过coroutines、sockets和其它...
    99+
    2023-01-31
    模块 标准 Python
  • Python asyncio的一个坑
    我们先从一个常见的Python编程错误开始说起,我已经见过非常多的程序员犯过这种错误了: def do_not_raise(user_defined_logic): tr...
    99+
    2024-04-02
  • asyncio异步IO--协程(Coro
    摘要:本文翻译自Coroutines and Tasks,主要介绍asyncio中用于处理协程和任务的方法和接口。在翻译过程中,译者在官方文档的基础上增加了部分样例代码和示意图表,以帮助读者对文档的理解。本文内容主要针对python3.7...
    99+
    2023-01-30
    IO asyncio Coro
  • Python asyncio的示例分析
    Python asyncio的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。我们先从一个常见的Python编程错误开始说起,我已经见过非常多的程序员犯过这...
    99+
    2023-06-22
  • python协程与 asyncio 库详情
    目录1.asyncio 异步 I/O 库异步函数的定义事件循环 event_loop创建 task回调返回值循环事件关闭2.本节爬虫项目前言: python 中协程概念是从 3.4 ...
    99+
    2024-04-02
  • 我实在不懂Python的Asyncio
    原语 事件循环(Event Loop) Awaitables和Coroutines Coroutine Wrappers Awaitables and Futures Tasks Handles Executors Transpor...
    99+
    2023-01-31
    不懂 我实在 Asyncio
  • python 中的 asyncio 异步协程
    目录一、定义协程二、运行协程三、协程回调四、运行多个协程五、run_forever六、多协程中关闭run_forever一、定义协程 asyncio 执行的任务,称为协程,但是Asy...
    99+
    2024-04-02
  • Python Asyncio调度原理是什么
    1.基本介绍Python.Asyncio是一个大而全的库,它包括很多功能,而跟核心调度相关的逻辑除了三种可等待对象外,还有其它一些功能,它们分别位于runners.py,base_event.py,event.py三个文件中。runners...
    99+
    2023-05-20
    Python asyncio
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作