0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

python协程之await等待过程理解

冬至配饺子 来源:缪斯之子 作者:肖新苗 2022-08-29 17:08 次阅读

目标

用一个等待过程理解,能够实现一致的方便,70行代码

例子说明

某方需要2,执行req2需要执行这个时间,最终执行时间是3秒,大约1秒,同时执行;如果最终时间是秒,如果执行的话,具体请参看,友情提示是,yield from 方法后面如果是它的工具,可以进入____

import time
from collections import deque

_delay = deque()


class FutureX:
def __init__(self, coro=None, delay_second=None):
self.coro = coro
if delay_second:
self.start = delay_second + time.time()

def step(self):
coro = self.coro
try:
result = coro.send(None)
except StopIteration as e:
print(e.value)
pass
else:
if isinstance(result, FutureX):
_delay.append((self._wakeup, result))
else:
pass

def _wakeup(self):
self.step()

def __iter__(self):
yield self
return None


def coroutine(func):
co = func.__code__
func.__code__ = co.replace(co_flags=co.co_flags | 0x100)
return func


@coroutine
def sleep0(seconds):

future = FutureX(delay_second=seconds)
b = yield from future
return seconds


async def req1(delay_seconds):
resp_time = await sleep0(delay_seconds)
return resp_time


async def req2(delay_seconds):
resp_time = await sleep0(delay_seconds)
return resp_time


t1 = time.time()
f1, f2 = FutureX(req1(2)), FutureX(req2(1))
f1.step()

f2.step()


while _delay:
callback, args = _delay.popleft()
start = args.start
if not start:
continue
while True:
end = time.time()
if start <= end:
try:
callback()
except StopIteration as e:
pass
break

print(f'花费的时间:{round(time.time() - t1,1)}')

'''
结果:
2
1
花费的时间:2.0
'''



审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • python
    +关注

    关注

    51

    文章

    4674

    浏览量

    83460
收藏 人收藏

    评论

    相关推荐

    鸿蒙原生应用开发-ArkTS语言基础类库异步并发简述async/await

    async/await是一种用于处理异步操作的Promise语法糖,使得编写异步代码变得更加简单和易读。通过使用async关键字声明一个函数为异步函数,并使用await关键字等待Promise的解析
    发表于 03-06 14:44

    python语言特点有哪些

    、详实和细致的描述,共计超过1500字。 简洁优雅: Python以简洁和优雅的语法而著称。相对于其他编程语言,Python代码通常看起来更加清晰易读。这得益于Python采用了面向对象的方法,通过使用缩进而不是括号来划分代码块
    的头像 发表于 11-29 14:29 456次阅读

    python软件怎么运行代码

    理解的机器代码。 在本文中,我们将详细介绍如何运行Python代码。我们将探讨以下几个方面:安装Python,设置环境变量,选择一个集成开发环境(IDE)或文本编辑器,编写代码,运行代码和调试代码。 第一步是安装
    的头像 发表于 11-28 16:02 532次阅读

    python如何查看运行过程

    Python是一门高级编程语言,可以用于开发各种类型的应用程序、网站和数据分析。当我们编写并运行Python程序时,有时候需要了解程序执行的详细过程,以便调试代码和理解程序的执行流程。
    的头像 发表于 11-22 11:13 907次阅读

    python写完程序之后怎么运行

    Python是一门简洁、易学的编程语言,被广泛应用于数据分析、人工智能等领域。在学习Python编程的过程中,了解程序的运行机制是至关重要的。本文将详尽解析Python程序的运行
    的头像 发表于 11-22 11:10 649次阅读

    python里面format怎么理解

    Python中,格式化字符串是一种用来创建动态字符串的强大工具。它允许你在字符串中插入变量、表达式和其他值,从而根据需要创建不同形式的输出。 str.format() 方法是Python中最
    的头像 发表于 11-22 09:42 189次阅读

    如何用Python理解委托模式

    voice 类产生“狗吠 ” 声,这时候就可以采用 委托模式 。下面就用Python理解这个设计模式。 Python里,在委托者类对象中,需要这么设计: 1. 重写__getattr__方法,使得委托者获得处理者的属性。 2
    的头像 发表于 11-02 15:30 288次阅读
    如何用<b class='flag-5'>Python</b>来<b class='flag-5'>理解</b>委托模式

    Python中元类的作用

    1.什么是类 在理解元类之前,我们必须先掌握Python中的类(class)。 和大多数语言一样,Python中的类知识用来描述如何“生成一个对象”: 但是,在Python中,类不仅能
    的头像 发表于 11-02 11:18 233次阅读
    <b class='flag-5'>Python</b>中元类的作用

    单片机python语言程序如何保存运算过程中的小数位?

    单片机python语言程序如何保存运算过程中的小数位
    发表于 10-08 06:42

    一文解读Python对Excel操作过程

    Python 是一种面向对象、直译式电脑编程语言,具有近二十年的发展历史,成熟且稳定。它包含了一组完善而且容易理解的标准库, 能够轻松完成很多常见的任务。 它的语法简捷和清晰, 尽量使用无异
    发表于 09-21 06:56

    请问nice处理器可以处理矩阵的乘法吗?

    请问nice接口可以运算矩阵的乘法吗,例程中给了加法的运算,但是过程我没太看明白, 特别是fun3和fun7的定义,还有寄存器的使用, 比如例程中: __STATIC_FORCEINLINE
    发表于 08-16 08:00

    为什么python适合人工智能

    Python是一种相对简单的编程语言。它的语法和结构逻辑清晰,代码易于阅读和理解Python中没有像C++或Java那样的过多的符号和特殊语法。这使得Python很容易让编程新手进入
    的头像 发表于 08-13 14:30 749次阅读

    Python实现OpenCV的安装与使用

    的,把 Python 转成 C++代码耗时太多,不 如直接学习下 Python 直接医用 Python 的代码。搭建 Python 环境的 过程
    发表于 07-20 11:46 7次下载

    Python中的默认编码

    ####1. Python源代码文件的执行过程 我们都知道,磁盘上的文件都是以二进制格式存放的,其中文本文件都是以某种特定编码的字节形式存放的。对于程序源代码文件的字符编码是由编辑器指定的,比如
    的头像 发表于 07-05 16:11 882次阅读
    <b class='flag-5'>Python</b>中的默认编码

    Python程之SQLITE-DTU701 辉为科技

    相比 MySQL 而言,SQLite 更为轻便、易于维护和部署。本文使用Python向SQLite数据库中插入温度数据,SQLite数据库中包含一张只包含三个字段的记录表——参数名称,时间和温度值
    发表于 06-01 19:48