我的编程空间,编程开发者的网络收藏夹
学习永远不晚

python3 asyncio

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

python3 asyncio

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 python3
# coding: 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

 


免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

python3 asyncio

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

下载Word文档

猜你喜欢

python3 asyncio

asyncio 是用来编写并发代码的库,使用async/await语法。asyncio 被用作多个提供高性能 Python 异步框架的基础,包括网络和网站服务,数据库连接库,分布式任务队列等等。asyncio 往往是构建 IO 密集型和高层
2023-01-31

python3 使用 asyncio

python3提供了协程专用的关键字async await, 还提供了asyncio库, 来进行异步非阻塞的io操作异步非阻塞的io操作?没有老师检查我也不知道自己算不算完全懂了, 就不做无用功尝试说得通俗易懂了.想要从原理开始理解的话,
2023-01-31

怎么在python3协程中使用asyncio

怎么在python3协程中使用asyncio?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Python主要用来做什么Python主要应用于:1、Web开发;2、
2023-06-14

简单有效上手Python3异步asyncio问题

这篇文章主要介绍了简单有效上手Python3异步asyncio问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
2023-01-03

Python 18.2 asyncio

asyncioasyncio是python3.4版本引入的标准库,直接内置了对异步IO的支持。asyncio的编程模型就是一个消息循环。我们从asyncio模块中直接获取一个EventLoop的引用,然后把需要执行的协程扔到EventLoo
2023-01-31

asyncio之Coroutines,T

Coroutines and Tasks属于High-level APIs,也就是高级层的api。本节概述用于协程和任务的高级异步api。CoroutinesCoroutines翻译过来意思是协程,使用async/await语法声明的协程是
2023-01-30

用 uWSGI 来跑 asyncio

最近关注的有点杂,所以也挺久没更新博客了。这一篇主要讨论这些技术:WSGI、py3k、werkzeug、asyncio、uWSGI、nginx。先从最简单的开始说—— WSGI。根据定义,这是一种 web 服务器接口规范,源自 Python
2023-01-31

Golang协程与 asyncio

golang 协程和 python asyncio 都是并发编程工具。协程是轻量级线程,在同一线程并发运行;asyncio 使用事件循环处理 i/o 事件。golang 协程语法简洁,性能优于 asyncio,适合密集型计算;asyncio
Golang协程与 asyncio
2024-04-15

关于asyncio知识(一)

一、介绍asyncio 是python3.4 引入的一个新的并发模块,主要通过使用coroutines 和 futures 来让我们更容易的去实现异步的功能,并且几乎和写同步代码一样的写代码,还没有烦人的回调。在2018年6月 3.7的更新
2023-01-30

Python标准模块--asyncio

asyncio模块作为一个临时的库,在Python 3.4版本中加入。这意味着,asyncio模块可能做不到向后兼容甚至在后续的Python版本中被删除。根据Python官方文档,asyncio通过coroutines、sockets和其它
2023-01-31

python3.6以上 asyncio模

这是python3.6以上版本的用法,本例是python3.7.2编写使用asyncio模块的异步编程模型,生产这消费者,异步生产,用sleep来代替IO等待使用async和await语法来进行描述async关键字描述一个方法是异步函数(协
2023-01-30

python协程--asyncio模块(

在高并发的场景下,python提供了一个多线程的模块threading,但似乎这个模块并不近人如意,原因在于cpython本身的全局解析锁(GIL)问题,在一段时间片内实际上的执行是单线程的。同时还存在着资源争夺的问题。python3.4之
2023-01-30

Python asyncio的示例分析

Python asyncio的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。我们先从一个常见的Python编程错误开始说起,我已经见过非常多的程序员犯过这种错误了:
2023-06-22

asyncio异步IO--协程(Coro

摘要:本文翻译自Coroutines and Tasks,主要介绍asyncio中用于处理协程和任务的方法和接口。在翻译过程中,译者在官方文档的基础上增加了部分样例代码和示意图表,以帮助读者对文档的理解。本文内容主要针对python3.7,
2023-01-30

我实在不懂Python的Asyncio

原语事件循环(Event Loop)Awaitables和CoroutinesCoroutine WrappersAwaitables and FuturesTasksHandlesExecutorsTransport and Protoc
2023-01-31

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录