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

    文章

    4797

    浏览量

    84787
收藏 人收藏

    评论

    相关推荐

    使用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:开源硬件实践是最优选择

    显著提升孩子的学习兴趣和对Python原理的理解。本文将探讨为何使用Raspberry Pi(树莓派)或Unihiker(行空板)等开源硬件是孩子们掌握Python的最佳途径。 让孩子们在Py
    的头像 发表于 09-06 09:49 333次阅读

    使用Python进行Ping测试

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

    pytorch和python的关系是什么

    在当今的人工智能领域,Python已经成为了最受欢迎的编程语言之一。Python的易学易用、丰富的库和框架以及强大的社区支持,使其成为了数据科学、机器学习和深度学习等领域的首选语言。而在深度学习领域
    的头像 发表于 08-01 15:27 2042次阅读

    opencv-python和opencv一样吗

    不一样。OpenCV(Open Source Computer Vision Library)是一个开源的计算机视觉和机器学习软件库,它提供了大量的图像和视频处理功能。OpenCV-Python
    的头像 发表于 07-16 10:38 1252次阅读

    用pycharm进行python爬虫的步骤

    以下是使用PyCharm进行Python爬虫的步骤: 安装PyCharm和Python 首先,您需要安装PyCharm和Python。PyCharm是一个流行的Python集成开发环境
    的头像 发表于 07-11 10:11 880次阅读

    使用Python进行自然语言处理

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

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

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

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

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

    如何使用linux下gdb来调试python程序

    如何使用linux下gdb来调试python程序  在Linux下,可以使用GDB(GNU调试器)来调试Python程序。GDB是一个强大的调试工具,可以帮助开发者诊断和修复程序中的错误。在本文
    的头像 发表于 01-31 10:41 2655次阅读

    谈谈程的那些事儿

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

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

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

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

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

    如何解决Python爬虫中文乱码问题?Python爬虫中文乱码的解决方法

    如何解决Python爬虫中文乱码问题?Python爬虫中文乱码的解决方法 在Python爬虫过程中,遇到中文乱码问题是常见的情况。乱码问题主要是由于编码不一致所导致的,下面我将详细介绍
    的头像 发表于 01-12 15:11 2453次阅读