asyncio

python3 asyncio

99封情书 提交于 2020-04-21 23:18:52
一、概述 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 写的非常不错,强烈推荐!!! 二、功能演示 这里有一个需求,需要ping内网中的所有ip地址,是否都可以pnig通。 内网网段为:192

python教程:使用 async 和 await 协程进行并发编程

江枫思渺然 提交于 2020-04-21 13:08:11
python 一直在进行并发编程的优化, 比较熟知的是使用 thread 模块多线程和 multiprocessing 多进程,后来慢慢引入基于 yield 关键字的协程。 而近几个版本,python 对于协程的写法进行了大幅的优化,很多之前的协程写法不被官方推荐了。如果你之前了解过 python 协程,你应该看看最新的用法。 并发、并行、同步和异步 并发指的是 一个 CPU 同时处理多个程序,但是在同一时间点只会处理其中一个。并发的核心是:程序切换。 但是因为程序切换的速度非常快,1 秒钟内可以完全很多次程序切换,肉眼无法感知。 并行指的是多个 CPU 同时处理多个程序,同一时间点可以处理多个。 同步:执行 IO 操作时,必须等待执行完成才得到返回结果。 异步:执行 IO 操作时,不必等待执行就能得到返回结果。 协程,线程和进程的区别 多进程通常利用的是多核 CPU 的优势,同时执行多个计算任务。每个进程有自己独立的内存管理,所以不同进程之间要进行数据通信比较麻烦。 多线程是在一个 cpu 上创建多个子任务,当某一个子任务休息的时候其他任务接着执行。多线程的控制是由 python 自己控制的。 子线程之间的内存是共享的,并不需要额外的数据通信机制。但是线程存在数据同步问题,所以要有锁机制。 协程的实现是在一个线程内实现的,相当于流水线作业。由于线程切换的消耗比较大

[未解决问题记录]python asyncio+aiohttp出现Exception ignored:RuntimeError('Event loop is closed')

限于喜欢 提交于 2020-04-11 10:48:14
找了半天没找到原因,记录一下 操作系统:windows 8.1 python版本:python 3.8.1 aiohttp版本:3.6.2 源码: 1 import asyncio 2 import aiohttp 3 4 5 async def aiohttp_request_test(url): 6 async with aiohttp.request( ' get ' , url= url) as resp: 7 await resp.text() 8 # await asyncio.sleep(1) # A1 9 10 11 async def main(): 12 await asyncio.gather(aiohttp_request_test( ' https://www.baidu.com ' )) 13 14 15 asyncio.run(main()) 16 # loop = asyncio.get_event_loop() 17 # loop.run_until_complete(main()) 运行以上代码时,出现如下异常: Exception ignored in : <function _ProactorBasePipeTransport. __del__ at 0x02A8C8E0> Traceback (most recent call last):

[未解决问题记录]python asyncio+aiohttp出现Exception ignored:RuntimeError(&apos;Event loop is closed&apos;)

断了今生、忘了曾经 提交于 2020-04-11 10:12:53
找了半天没找到原因,记录一下 操作系统:windows 8.1 python版本:python 3.8.1 aiohttp版本:3.6.2 源码: 1 import asyncio 2 import aiohttp 3 4 5 async def aiohttp_request_test(url): 6 async with aiohttp.request( ' get ' , url= url) as resp: 7 await resp.text() 8 # await asyncio.sleep(1) # A1 9 10 11 async def main(): 12 await asyncio.gather(aiohttp_request_test( ' https://www.baidu.com ' )) 13 14 15 asyncio.run(main()) 16 # loop = asyncio.get_event_loop() 17 # loop.run_until_complete(main()) 运行以上代码时,出现如下异常: Exception ignored in : <function _ProactorBasePipeTransport. __del__ at 0x02A8C8E0> Traceback (most recent call last):

pyqt5 异步事件 收集

北慕城南 提交于 2020-04-06 18:03:36
pyqt5 异步事件 收集 quamash, 利用Qt事件循环实现 PEP 3156事件循环( asyncio ) api https://www.kutu66.com//GitHub/article_112085 PyQt5 界面显示无响应的实现 http://www.cppcns.com/jiaoben/python/304010.html from PyQt5 . QtCore import QThread , pyqtSignal class interface ( QMainWindow , Ui_MainWindow ) : "" " Class documentation goes here . "" " def xxxx ( ) : "此处省略无数行代码......" self . Work ( ) def Work ( self ) : self . thread = RunThread ( ) self . thread . start ( ) class RunThread ( QThread ) : # python3,pyqt5与之前的版本有些不一样 # 通过类成员对象定义信号对象 # _signal = pyqtSignal ( str ) trigger = pyqtSignal ( ) def __init__ ( self , parent =

帮你搞懂Python进程,线程与协程

南笙酒味 提交于 2020-03-24 16:08:58
3 月,跳不动了?>>> 本文参考原文- http://bjbsair.com/2020-03-22/tech-info/4425/ 在操作系统中,每一个独立运行的程序,都占有 操作系统 分配的资源,这些程序中间互不干涉,都只负责运行自己的程序代码,这就是进程。 但是当操作系统频繁的创建销毁进程时,大量的系统资源被浪费在创建和销毁的过程中。而随着多核心 cpu 的出现,线程也逐渐代替了进程,成为了操作系统 可以独立运行的基本单位。 当进程不是多线程程序时,存在于进程当中的唯一线程,便是进程本身运行的代码块。 而当多线程出现在一个进程中时,则多个线程之间共享此进程的资源,并接受操作系统的调度来运行每个线程。 状态 协程 为了了解协程的概念,我们先来了解一下并发和并行。 并行 并行比较好理解,即有多个程序在同时执行,这里的程序指的是操作系统的线程。 每个 cpu 核心,只能在同一个时刻运行一组指令,意味着同一时刻,一个核心上只有一个线程在执行。 当 cpu 有四个核心时,他只可以 执行4个线程。 并发 想要了解并发,就需要知道 和 。 同步阻塞 当程序中的一个 I/O 操作,会占据比较长的时间,这时候,程序没有被挂起,且一直在等待网络数据传输,无法进行其他操作,这时候就是同步阻塞。 同步的一个概念就是,网络传输完成后也无法告知主程序操作完成,这就导致了主程序: 要么只能进行等待 I/O

一种在 python 中用异步协程实现的HTTP-API测试工具

南楼画角 提交于 2020-02-27 07:23:33
1 实现内容 通过包装 python 的内部模块 argparse , asyncio 和第三方库 aiohttp ,结合 python 3.5 之后的 async , await , 装饰器 等语法糖编写了一个 HTTP-API 测试工具,各 HTTP-API 以协程为单位异步并发请求。 对于主要心思花在 诸如 HTTP 结合 RESTful 接口设计开发或架构相关得广泛 的角色可以考虑用这个工具测试所编写的HTTP-API接口。如和是30个相同HTTP-API的请求的运行打个照面(异步并发将节约2s时间): ... 15 http://api.heclouds.com:80/ipc/video/boot_address 31.41ms 17 http://api.heclouds.com:80/ipc/video/boot_address 46.86ms 20 http://api.heclouds.com:80/ipc/video/boot_address 46.86ms sync request total time: 1939.13ms async request total time: 203.08ms time saved about 1736.05ms from sync to async ---------------------done-------------

uvloop http

大兔子大兔子 提交于 2020-01-07 14:42:27
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> import time from statistics import mean, stdev import asyncio import uvloop import aiohttp urls = [ 'https://aws.amazon.com', 'https://google.com', 'https://microsoft.com', 'https://www.oracle.com/index.html' 'https://www.python.org', 'https://nodejs.org', 'https://angular.io', 'https://www.djangoproject.com', 'https://reactjs.org', 'https://www.mongodb.com', 'https://reinvent.awsevents.com', 'https://kafka.apache.org', 'https://github.com', 'https://slack.com', 'https://authy.com', 'https://cnn.com', 'https://fox.com', 'https://nbc.com', 'https://www

python协程 生成器

笑着哭i 提交于 2019-12-15 18:31:10
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 协程,又称微线程,纤程。英文名Coroutine。 线程是系统级别的它们由操作系统调度,而协程则是程序级别的由程序根据需要自己调度。在一个线程中会有很多函数,我们把这些函数称为子程序,在子程序执行过程中可以中断去执行别的子程序,而别的子程序也可以中断回来继续执行之前的子程序,这个过程就称为协程。也就是说在同一线程内一段代码在执行过程中会中断然后跳转执行别的代码,接着在之前中断的地方继续开始执行,类似与yield操作。 协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此:协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态,换种说法:进入上一次离开时所处逻辑流的位置。 因为协程是一个线程执行,那怎么利用多核CPU呢?最简单的方法是多进程+协程,既充分利用多核,又充分发挥协程的高效率,可获得极高的性能。 协程的优点: 无需线程上下文切换的开销,协程避免了无意义的调度,由此可以提高性能(但也因此,程序员必须自己承担调度的责任,同时,协程也失去了标准线程使用多CPU的能力) 无需原子操作锁定及同步的开销 方便切换控制流,简化编程模型 高并发+高扩展性+低成本

Python3 Flask asyncio subprocess in route hangs

我只是一个虾纸丫 提交于 2019-12-09 03:48:19
问题 I'm using Flask 1.0.2 with Python 3.6 on Ubuntu 18.04. My app should use asyncio and asyncio.create_subprocess_exec() to lauch a background script, read stdout from it, and then return status when the script is done. I am basically trying to implement an answer from this post: Non-blocking read on a subprocess.PIPE in python The script is successfully launched, and I get all of my expected output from it, but the problem is that it never returns ( meaning the Killing subprocess now line is