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
    +关注

    关注

    56

    文章

    4781

    浏览量

    84443
收藏 人收藏

    评论

    相关推荐

    使用TMS320C6416处理器:Turbo处理器(TCP)

    电子发烧友网站提供《使用TMS320C6416处理器:Turbo处理器(TCP).pdf》资料免费下载
    发表于 10-23 10:16 0次下载
    使用TMS320C6416<b class='flag-5'>协</b>处理器:Turbo<b class='flag-5'>协</b>处理器(TCP)

    使用TMS320C6416处理器:Viterbi处理器(VCP)

    电子发烧友网站提供《使用TMS320C6416处理器:Viterbi处理器(VCP).pdf》资料免费下载
    发表于 10-21 09:36 0次下载
    使用TMS320C6416<b class='flag-5'>协</b>处理器:Viterbi<b class='flag-5'>协</b>处理器(VCP)

    使用Python进行Ping测试

    )请求包,然后等待目标主机返回响应包,从而测量网络的延迟和丢包情况。随着Python编程语言的广泛应用,越来越多的网络工程师开始使用Python进行自动化网络测试和管理任务。本篇文章将详细介绍如何使用
    的头像 发表于 08-12 17:56 437次阅读
    使用<b class='flag-5'>Python</b>进行Ping测试

    使用Python进行自然语言处理

    在探讨使用Python进行自然语言处理(NLP)的广阔领域时,我们首先需要理解NLP的基本概念、其重要性、Python在NLP中的优势,以及如何通过Python实现一些基础的NLP任务
    的头像 发表于 07-04 14:40 394次阅读

    鸿蒙OS开发实例:【ArkTS类库异步并发async/await

    async/await是一种用于处理异步操作的Promise语法糖,使得编写异步代码变得更加简单和易读。通过使用async关键字声明一个函数为异步函数,并使用await关键字等待Promise的解析(完成或拒绝),以同步的方式编
    的头像 发表于 04-02 20:57 955次阅读
    鸿蒙OS开发实例:【ArkTS类库异步并发async/<b class='flag-5'>await</b>】

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

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

    谈谈程的那些事儿

    随着异步编程的发展以及各种并发框架的普及,程作为一种异步编程规范在各类语言中地位逐步提高。我们不单单会在自己的程序中使用程,各类框架如fastapi,aiohttp等也都是基于异步以及程进行实现。那到底什么是
    的头像 发表于 01-26 11:36 1085次阅读
    谈谈<b class='flag-5'>协</b>程的那些事儿

    分别使用多线程多进程程+paramiko在华为交换机批量快速进行配置

    python对于网络设备的操作属于I/O密集型,在脚本运行时,存在大量的等待时间。我们便可以利用这些空闲的时间,进行其他的操作。
    的头像 发表于 01-16 09:13 816次阅读
    分别使用多线程多进程<b class='flag-5'>协</b>程+paramiko在华为交换机批量快速进行配置

    如何使用Python进行图像识别的自动学习自动训练?

    图像识别的自动学习和自动训练。 首先,让我们了解一下图像识别的基本概念。图像识别是指通过计算机程序识别和理解图像内容的过程。自动学习和自动训练是指计算机通过观察和学习数据,自动提取特征并训练模型来实现图像识别的能力。 在Python
    的头像 发表于 01-12 16:06 535次阅读

    如何让python运行完后不退出

    Python是一门非常灵活和强大的编程语言,广泛应用于各种领域。许多Python程序都需要保持在后台运行,而不是在执行完毕后立即退出。本文将介绍如何实现这一目标。 一、使用input函数
    的头像 发表于 11-29 15:12 8033次阅读

    python安装后idle在哪儿

    Python 是一种非常流行的编程语言,它使用简单且易于理解的语法,使得它成为初学者和专业开发人员的首选。Python 的安装非常简单,您只需在官方网站上下载适合您操作系统的安装包,然后按照提示进行
    的头像 发表于 11-29 14:52 1147次阅读

    python语言特点有哪些

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

    python软件怎么运行代码

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

    python的run在哪

    : $ python my_program.py 这种方式适用于简单的Python程序,执行过程直接在命令行中显示。这种运行
    的头像 发表于 11-24 09:27 1983次阅读

    python怎么运行程序

    Python是一种广泛使用的编程语言,它的简易和可读性使得它成为初学者和专业开发人员的首选。在运行Python程序之前,您需要安装Python解释器,然后按照以下步骤进行操作。 步骤1:安装
    的头像 发表于 11-24 09:25 2488次阅读