asyncio 是 Python 3.4 引入的标准库,是一个基于事件循环的异步 I/O 并发库。它提供了一种协作式的多任务处理方式,使得我们能够在一个线程中并发处理多个 I/O 操作。它通过将 I/O 操作转化为异步的非阻塞调用,从而实现了高效的并发处理。其原理如下:

  1. 定义协程(coroutine):使用关键字 async def 定义一个协程函数,它是一种特殊的函数,可以暂停执行并在稍后恢复执行。

  2. 创建一个事件循环(event loop):事件循环是一个无限循环,它不断地等待事件的发生并处理这些事件。在事件循环中,我们可以注册协程、定时器和回调函数等事件。

  3. 启动事件循环:调用事件循环的 run_until_complete() 方法,将协程注册到事件循环中并启动事件循环。

  4. 在协程中使用 await:使用关键字 await 可以暂停当前协程的执行,等待另一个协程或异步操作完成后再恢复执行。

下面是一个使用 asyncio 实现异步框架程序的示例,创建一个任务列表,列表中有 100 个任务,每个任务是返回一个数字,数字从 0 开始。

import asyncio

async def get_number(n):
await asyncio.sleep(1) # 模拟耗时操作
return n async def main():
tasks = []
for i in range(100):
tasks.append(asyncio.create_task(get_number(i)))
numbers = await asyncio.gather(*tasks)
print(numbers) if __name__ == '__main__':
asyncio.run(main())

上述代码中,我们定义了一个 get_number() 协程函数,它模拟一个耗时操作并返回一个数字。然后我们在 main() 协程中创建了一个包含 100 个任务的任务列表,每个任务都是调用 get_number() 函数。最后,我们使用 asyncio.gather() 方法等待所有任务完成,并打印出所有数字。在最后,我们使用 asyncio.run() 函数来启动事件循环。这个示例程序使用 asyncio 实现了一个简单的异步框架,可以在一个线程中同时处理多个 I/O 操作,提高程序的并发能力。  

asyncio的基本使用框架,python高效处理数据,asyncio.gather(),asyncio. create_task(),asyncio.run(main())的更多相关文章

  1. 初探接口测试框架--python系列7

    点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...

  2. 初探接口测试框架--python系列2

    点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...

  3. 初探接口测试框架--python系列3

    点击标题下「微信」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是我们期 ...

  4. 初探接口测试框架--python系列4

    点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...

  5. 初探接口测试框架--python系列5

    点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...

  6. 初探接口测试框架--python系列6

    点击标题下「蓝色微信名」可快速关注 坚持的是分享,搬运的是知识,图的是大家的进步,没有收费的培训,没有虚度的吹水,喜欢就关注.转发(免费帮助更多伙伴)等来交流,想了解的知识请留言,给你带来更多价值,是 ...

  7. web框架python

    22.python笔记之web框架   一.web框架本质 1.基于socket,自己处理请求 #!/usr/bin/env python3 #coding:utf8 import socket de ...

  8. 《Python高效开发实战》实战演练——内置Web服务器4

    <Python高效开发实战>实战演练——开发Django站点1 <Python高效开发实战>实战演练——建立应用2 <Python高效开发实战>实战演练——基本视图 ...

  9. 【Python】web.py-简单轻量级网页框架python

    简单轻量级网页框架python web.py的安装 python 3.x中安装web.py 最近决定从python2.7转移到3.x上工作. 使用数据库的时候,依然选用了之前比较感兴趣的web.py ...

  10. 《Python高效开发实战》实战演练——基本视图3

    在完成Django项目和应用的建立后,即可以开始编写网站应用代码,这里通过为注册页面显示一个欢迎标题,来演示Django的路由映射功能. 1)首先在djangosite/app/views.py中建立 ...

随机推荐

  1. IDEA设置编码为UTF-8编码

    IntelliJ IDEA 统一设置编码为utf-8编码 问题一: File->Settings->Editor->File Encodings 网上的方法大部分都是错的,上图的单选 ...

  2. window nginx php ci框架环境搭建

    下载nginx 后修改配置文件: location / { #try_files $uri $uri/ /index.php?$query_string; root C:\Software\serve ...

  3. 查看shell 用户连接数

    w | grep pts |wc -l

  4. wmware桥接模式

    配置思路(桥接模式) 准备一个与PC机同网段且未被占用的IP地址 将虚拟机的网络模式修改为桥接模式(默认为NAT模式) 修改网卡配置文件,配置为准备好的IP地址,并重启网络服务. 配置DNS解析服务器 ...

  5. spring boot 常见问题

    什么是 Spring Boot? 简单来说,spring boot 底层就是:spring + spring mvc + tomcat + 其他框架 starter: spring boot 依靠 s ...

  6. Nginx配置ThinkPHP3.1的PATHINFO模式

    location / {    if (!-e $request_filename) {         rewrite ^/(.*)$ /index.php?$1 last;         bre ...

  7. nginx Redis 不能访问问题

    开始以为     proxy_cookie_path    /report/     /; 没有配置 配置后还是访问了,老的session 就过期 本地代理主程序,访问本地的 /report/ 可以 ...

  8. STM32定时器(TIM1、TIM2、TIM3、TIM4、TIM5、TIM8)高级定时器+普通定时器,配置使用

    2.1    时钟来源 计数器时钟可以由下列时钟源提供: ·内部时钟(CK_INT) ·外部时钟模式1:外部输入脚(TIx) ·外部时钟模式2:外部触发输入(ETR) ·内部触发输入(ITRx):使用 ...

  9. 《MySQL是怎样运行的》第七章小结

  10. Android笔记--图像显示

    imageView 具体实现: 注意:图片名称应当为小写的英文字母与数字的结合,当然,二者可以只存在其一 图片的放置的比例:(通过scaleType属性设置) ImageButton ImageBut ...