在 Python 异步编程中使用 `awaitable` 对象

2026年GESP3月认证C++五级真题解析 因为要合并成升序数组,所以当A[i]小于等于B[j]时,取A[i],否则取B[j]。当a[i]>a[j]时,左边数组中从i到m的所有元素都大于a[j],因此逆序对数量增加m-i+1。给定一个包含n个互不相同的正整数的数组A与一个包含m个互不相同的正整数的数组B,请你帮忙计算有多少个数在数组A与数组B中均出现。下面代码实现两个整数除法,其中被除数为一个“大整数”,用字符串表示,除数是一个小整数,用int表示,则横线处应该填写()。且a[i] > a[j],则a[i]和a[j]是一个逆序对。 阅读详情

在 Python 异步编程中使用 awaitable 对象

在 awaitable 对象上,我们可以应用 await 语句。asyncio 中的大部分函数和模块被设计为可以与 awaitable 对象一起使用。但是大部分 Python 对象和第三方库,不是为异步编程构建的。当构建异步应用程序时,有一点非常重要,那就是选择提供可用 awaitble 对象的兼容库。

awaitalbe 对象主要被分成三种类型:协程、任务和期物 (Futures)。我们已经讨论过了协程和任务。期物是一种低层次对象,像一种回调机制,用来处理来自于async/await的结果。期物对象通常不会暴露于用户级编程。

并发运行任务

如果我们一定要并行运行多个任务,我们可以使用 await 关键字,就像我们在之前的例子中做的那样。但是有一种更好的方法做这件事,就是使用 gather 函数。这个函数会按提供的序列运行 awaitable 对象。如果任何awaitable 对象是协程,它将被调度为任务。后面的例子中我们会演示 gather 函数的使用。

使用队列分发任务

asyncio 包中的 Queue 队列和 Queue 模块类似,但是不是线程安全的。但是 asyncio 模块提供了多种队列实现,比如 FIFO 队列、优先级队列和LIFO队列。asyncio 模块中的队列可以用来把工作负载发布为任务。

为了演示任务对列的使用,我们会写一个小程序,通过随机休眠一段时间来模拟实际函数的执行时间。为 10 次这样的执行计算随机休眠时间,并且由主进程作为工作项添加到 Queue 对象中。Queue 队列被传递到一个有三个任务的池中。任务池中的每一个任务执行给定的协程,协程会消费每一个对它可见的队列记录中的执行时间(该协程根据其可用的队列条目消耗执行时间)。下面是完整的代码示例:

import time

async def executer(name, queue):
    while True:
        exec_time = await queue.get()
        await asyncio.sleep(exec_time)
        queue.task_done()

async def main():
    myqueue = asyncio.Queue()
    calc_execution_time = 0
    for _ in range(10):
        sleep_for = random.uniform(0.4, 0.8)
        calc_execution_time += sleep_for
        myqueue.put_nowait(sleep_for)

    tasks = []
    for id in range(3):
        task = asyncio.create_task(executer(f'任务-{id + 1}', myqueue))
        tasks.append(task)

    start_time = time.monotonic()
    await myqueue.join()
    total_exec_time = time.monotonic() - start_time

    for task in tasks:
        task.cancel()

    await asyncio.gather(*tasks, return_exceptions=True)

    print(f"执行时间:{calc_execution_time:0.2f}")
    print(f"实际执行时间:{total_exec_time:0.2f}")


asyncio.run(main())

我们使用 Queue 队列的 put_nowait 函数,因为它是一个非阻塞操作。上面的代码的执行结果是:

执行时间:6.22
实际执行时间:2.40

这清晰的演示了任务是并行执行的,执行时间是顺序执行的近三分之一。

<完>

基于STM32的蓝牙智能药盒设计 本研究设计了一种基于STM32F103C8T6单片机的蓝牙智能药盒系统,针对老年人用药管理需求,集成了定时提醒、药量检测、环境监测等功能。系统通过LCD1602显示屏实时显示时间与用药信息,支持每日3次定时提醒及3种药物用量设置,采用DHT11温湿度传感器、HX711药量检测模块和红外传感器实现环境监控,并通过蓝牙模块实现远程用药提醒。测试结果表明,系统定时误差≤30秒,温湿度监测精度±2℃,药量检测误差<1g,各项功能运行稳定。该设计为解决老年人用药依从性问题提供了智能化解决方案,具有实用价值和应用前景。 阅读详情

相关推荐

树莓派用网线连着电脑,但是找不到它的ip 以及设置静态IP

第一次的话,树莓派默认是没有ssh的。需要把内存卡取出来,新建一个ssh文件,这个简单,新建一个txt文件重命名就好了。 如果前面配置了连接wifi的conf文件,它是会自动去连接wifi的,wifi连不上,它才会去尝试有线连接。所以把它的wifi关了,才会自动用网线连接。 另外,建议设置静态ip连接,这样避免网络连接突然中断。具体在etc/dhcpcd.conf文件中,把这几行前面的#去掉,然后后面的信息改成自己的就好了。 具体改法: 第一行是ip地址,这个找到自己电脑的ip段,然后改后面两个数字就好了

wander_ing的博客 1万+

javascript 回顾一下 键的集合对象

文章目录一、Map二、方法1.entries() 一、Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值) 都可以作为一个键或一个值。 键的比较是基于 sameValueZero 算法: NaN 是与 NaN 相等的(虽然 NaN !== NaN),剩下所有其它的值是根据 === 运算符的结果判断是否相等。 Map.prototype.size 返回Map对象的键/值对的数量。 let myMap = new Map(); let keyObj = {}; let ke

cyadyx的博客 332

光通信仿真入门:手把手教你用VPI和Matlab搭建第一个联合仿真系统(含避坑指南)

本文详细介绍了如何使用VPI和Matlab搭建光通信联合仿真系统,涵盖软件配置、链路搭建、数据交互等关键环节,并提供常见问题的解决方案。特别适合初学者快速掌握光通信仿真技术,避免常见错误,提升仿真效率。

weixin_28733637的博客 378

python awaitable_如何使python等待对象

In python 3.5.1 one can make use of await/async, however, to use it (as I undestand), you need to have awaitable object.An awaitable object is an object that defines __await__() method returning an it...

weixin_39614675的博客 385

中国传媒大学计算机考研初复试经验贴

中传的计算机专业考研的话主要分为两大学院:计网学院和国重,大部分专业在计网学院。

DoKiDoK的博客 1561

nRF52840 低功耗蓝牙开发指南:从硬件架构到物联网应用实战

本文深入解析nRF52840低功耗蓝牙芯片的硬件架构与开发实践,涵盖从开发环境搭建到BLE协议栈开发的详细指南。通过实战案例分享低功耗优化技巧,帮助开发者高效实现物联网应用,特别适合智能家居和工业场景。

d3e4f的博客 417

python协程(2): asyncio的核心概念与基本架构(含任务创建执行标准用法)

python 协程(2)-- asyncio

Python开发分享的博客 6910

Windows下用RKDevTool解包update.img的完整流程(含常见错误排查)

本文详细介绍了在Windows系统下使用RKDevTool工具解包update.img固件的完整流程。从工具准备、环境搭建到逐步解包操作,重点解析了输出文件结构,并提供了修改分区后重新打包的实战方法。文章还针对解包失败、打包错误等常见问题提供了详细的排查与解决方案,旨在帮助嵌入式开发者和爱好者高效完成固件分析与定制工作。

aa123的博客 716

python awaitable_Python中await加一个awaitable的操作,如何把普通操作变成awaitable?

目前通用的做法是选择已有的对应的数据库客户端库的封装,缺点是并没有官方正式的,所以会出现多个库让人不知道如何权衡,比如PostgreSQL现在可选的就有MagicStack/asyncp和 aio-libs/aiopg,redis的更多,现在有 jonathanslenders/asyncio-redis、aio-libs/aioredis 和 NoneGG/aredis。所以有个比较大的问题,就...

weixin_39790102的博客 557

ANSYS Workbench接触分析实战:从算法选择到收敛难题破解

本文深入解析ANSYS Workbench接触分析的核心技术与实战技巧,涵盖四大接触算法选择、收敛难题破解秘籍及典型场景参数设置。通过实际案例演示如何优化接触刚度、pinball区域和非对称行为等关键参数,帮助工程师有效解决结构非线性问题,提升仿真效率和精度。

weixin_28705087的博客 359

磁盘I/O %util特别高

磁盘I/O %util特别高

eagle89的专栏 3090

【深入浅出C# async/await】理解 awaitable-awaiter 模式

Part1中我们展示了任何Task都是可等待的。实际上还有其他可等待的类型。//返回 ConfiguredTaskAwaitable.它拥有一个GetAwaiter方法,实际上在Part1我们在Task中也看到了GetAwaiter()。另外一个例子是同样,它只有一个GetAwaiter(),本文将主要探讨什么是可等待的。

m0_62389241的博客 1587

第五章 TTM 后备管理:5.6系统内存域

系统内存域由 TTM 内置资源管理器管理,通过 ttm_tt 承载页信息,依赖 ttm_pool 提供物理页。ttm_tt 管理页数组、缓存属性与状态标志,支持外部页与换出机制。初始化分 ttm_tt_init 与 ttm_sg_tt_init,生命周期包括创建、填充、释放与销毁。页池针对 write-combined、uncached 及一致性 DMA 分配的页进行缓存,提升性能并减少 TLB 刷新。分配时高阶优先、批量设置缓存属性,回收时清零后归还池中,确保高效复用。

图形/计算GPU的驱动与虚拟化技术分享园地 2569

python3异步编程async/await 原理解释的比较详细的文章

身为Python核心开发组的成员,我对于这门语言的各种细节充满好奇。尽管我很清楚自己不可能对这门语言做到全知全能,但哪怕是为了能够解决各种issue和参与常规的语言设计工作,我也觉得有必要试着接触和理解Python的内核,弄清楚在底层它是怎么工作的。 话虽如此,直到最近我才理解了Python3.5中async/await的工作机制。在此之前,对于async/await语法,我只知道Python3.3中的yield from和Python3.4中的asyncio让这个新语法得以在Python3.5中实现。由

permike的专栏 1万+

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

awaitable 可等待对象.md

能在 await 表达式中使用的对象。可以是 coroutine 或是具有 __await__() 方法的对象。参见 PEP 492。 注意可等待对象有两种: coroutine,在上节中有讲; 具有 __await__() 方法的对象,只要一个类实现了__await__方法,那么通过它构造出来的实例就是一个Awaitable。 下面这段代码就是 awaitable 抽象基类: class A...

hunyxv的博客 1659

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

python awaitable_Python abc.Awaitable方法代码示例

# 需要导入模块: from collections import abc [as 别名]# 或者: from collections.abc import Awaitable [as 别名]def test_Awaitable(self):def gen():yield@types.coroutinedef coro():yieldasync def new_coro():passclass B...

weixin_29486805的博客 331

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

如何使用Python协程(asyncio、await关键字)

知道生成器(Generator)可由以下两种方式定义: 列表生成器 使用yield定义的函数 在Python早期的版本中协程也是通过生成器来实现的,也就是基于生成器的协程(Generator-based Coroutines)。在前一篇介绍生成器的文章末尾举了一个生产者-消费者的例子,就是基于生成器的协程来实现的。 def producer(c): n = 0 while n < 5: n += 1 print('producer {}'.forma

ol_m_lo的博客 1142

Python异步编程:await与asyncio详解

模拟网络请求async def fetch_data(url) : # 模拟网络请求 await asyncio . sleep(1) return f"Data from {url } "async def fetch_data(url) : # 模拟网络请求 await asyncio . sleep(1) return f"Data from {url } "适用场景:I/O 密集型任务,如网络、文件、数据库操作。关键点使用async def定义协程,用await挂起阻塞操作。通过。

大聪明的博客 2061

python awaitable_Python 3.5的async和await特性(PEP492翻译)(转)

原因:1,coroutine容易与正常的generators弄混2,一个function是否为coroutine由函数体内是否有yield 或者yield from 决定,这不科学。3,如果在语法上允许yield的地方才能进行异步调用,那诸如with和for语句中都不能执行异步了。咋解决呢,把coroutine当成一个native的Python语言特性,与generator完全独立。Native ...

weixin_39778214的博客 418

使用 collections.abc 中 Awaitable, Callable, Sequence 的教程

使用 collections.abc 中 Awaitable, Callable, Sequence 的教程

engchina的专栏 916

Java 实现 Awaitable(多线程并行等待,类似 AutoEventReset 的作用)

AutoEventReset、ManualEventReset,是我们在多线程并行编程之中常常需要涉及的,但是 ManualEventReset 可能用的并没有那么多,这个多用于实现读写锁的,当然 Java 自己库提供了官方实现,就没必要自己去整了。C/C++ 里面的话,这块基本都是自己写的,毕竟标准库STL得功能咋个说,这块太弱了,说没也有点东西,说有东西又差了很多点的意思,得自己上马搞底层造轮子,总之奇奇怪怪。2、 processed (其它处理任务得线程完成了调用这个,顾名思义:处理结束)

liulilittle的博客 582

C#黑科技:用动态类型实现自定义awaitable对象

通过组合使用dynamic和接口代理,我们可以让任何对象都支持await操作。这展示了C#语言设计的灵活性,也为解决特定问题提供了新的思路。虽然在实际开发中我们通常使用Task,但了解这种底层机制有助于我们更深入地理解C#的异步编程模型。await不依赖具体类型,而是依赖特定的模式ExpandoObject提供运行时动态扩展能力接口代理解决动态对象的类型约束问题理解底层机制有助于编写更优雅的异步代码。

钢铁男儿 489

Boost.Asio中的awaitable:异步编程的新范式

协程函数的返回类型为,其中T是协程的返回值类型。例如,一个返回类型为void//协程逻辑提供了一种高效且易于理解的方式来实现异步编程,特别适合处理I/O密集型任务。通过co_await关键字,你可以以同步的方式编写异步代码,从而提高代码的可读性和可维护性。此外,awaitable还支持并发协程,允许你并发等待多个异步操作,进一步提高程序的性能。祝大家学习顺利~如有任何错误,恳请批评指正~~🎈关注我的公众号AISun可以获取Chatgpt最新发展报告以及腾讯字节等众多大厂面经。

dont worry about it的博客 1726

Awaitable

We say that an object is anawaitableobject if it can be used in an awaitexpression. Many asyncio APIs are designed to accept awaitables. There are three main types ofawaitableobjects:coroutines,Tasks, andFutures. Coroutines Python coroutines a...

piglite的专栏 269

Python Async/Await入门指南

转自:https://zhuanlan.zhihu.com/p/27258289 本文将会讲述Python 3.5之后出现的async/await的使用方法,以及它们的一些使用目的,如果错误,欢迎指正。 昨天看到David Beazley在16年的一个演讲:Fear and Awaiting in Async,给了我不少的感悟和启发,于是想梳理下自己的思路,所以有了以下这篇文章...

dechen6073的博客 473

创建自己的awaitable类型

在C# 5.0中引入了await关键字,通过它可以非常容易的实现异步操作。在大多数的时候,await一般适合Task一起使用的,也非常方便。但有的时候,我们也需要自定义我们自己的awaitable类型,以实现更高的灵活性和效率。 可以用于await运算符的对象要求如下: 有一个GetAwaiter()方法或扩展方法,它返回一个实现了INotifyCompletion接口的awaiter对象(或...

weixin_33851177的博客 284
上一篇: 理解 Python 中的 `asyncio` 模块
下一篇: Flask 框架简介
dowhileprogramming
博客等级 码龄25年 517粉丝 78原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dowhileprogramming

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值