Asyncio 中的无限循环或“递归”

2024-06-02

我是 Python3 asyncio 的新手。

我有一个函数可以不断地从 websocket 连接检索消息。

我想知道我是否应该使用while True循环或asyncio.ensure_future以递归方式。

哪个是首选还是不重要?

Example:

async def foo(websocket):
    while True:
        msg = await websocket.recv()
        print(msg)
        await asyncio.sleep(0.0001)

or

async def foo(websocket):
    msg = await websocket.recv()
    print(msg)
    await asyncio.sleep(0.0001)
    asyncio.ensure_future(foo(websocket))

我推荐迭代变体,原因有两个:

  1. 更容易理解和扩展。与基于回调的 future 相比,协程的好处之一是它们允许使用熟悉的控制结构,例如if and while对代码的执行进行建模。如果您想将代码更改为例如在现有循环周围添加一个外循环,或者在循环后添加一些代码(例如另一个循环),这在非递归版本中会容易得多。

  2. 它更有效率。呼唤asyncio.ensure_future(foo(websocket))为每个新迭代实例化一个新的协程对象和一个全新的任务。虽然两者都不是特别重量级,但在其他条件相同的情况下,最好避免不必要的分配。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Asyncio 中的无限循环或“递归” 的相关文章

  • 有没有一种方法可以帮助让这个Python逻辑运行得更快

    我一直在研究一种从 PLC 传感器获取数据的解决方案Python我能够计算出语法等使用cpppo https github com pjkundert cpppo就以假定的序列化方式循环从标签获取数据而言 这工作得很好 为了测试这个新的Py
  • 为什么我在迭代 28 后收到错误:“JSONDecodeError:期望值:第 1 行第 1 列(字符 0)”? [复制]

    这个问题在这里已经有答案了 我正在尝试从政府的 API 中提取数据 该 API 分为多个页面 每页有 10 个观察结果 我编写了一个算法 可以从每个观察中获取重要信息并将其添加到 pandas 数据框中 一切都很顺利 直到我到达迭代 29
  • Pandas DataFrame 到嵌套 JSON 而不更改数据结构

    I have pandas DataFrame import pandas as pd import json df pd DataFrame 2016 04 30T20 02 25 693Z vmPowerOn vmName 2016 0
  • numba vstack 不适用于数组列表

    对我来说很奇怪的是 当输入是数组列表时 vstack 不能与 Numba 一起使用 它仅在输入是数组元组时才起作用 示例代码 nb jit nopython True def stack items return np vstack ite
  • 在 Pandas UDF PySpark 中传递多列

    我想计算 PySpark DataFrame 两列之间的 Jaro Winkler 距离 Jaro Winkler 距离可通过所有节点上的 pyjarowinkler 包获得 pyjarowinkler 的工作原理如下 from pyjar
  • 使用 Python 请求通过 POST 请求发送图像

    我目前正在尝试使用 Python 3 5 和 Requests 库来发送 POST 请求 此 POST 将发送一个图像文件 这是示例代码 import requests url https api address files files o
  • 调用 close() 后大文件没有立即刷新到磁盘?

    我正在使用 python 脚本创建大文件 超过1GB 实际上有 8 个 在创建它们之后 我必须创建将使用这些文件的进程 该脚本如下所示 This is more complex function but it basically does
  • 无法保存自定义子类模型

    灵感来自tf keras Model 子类化 https www tensorflow org guide keras model subclassing我创建了自定义模型 我可以训练它并获得成功的结果 但是我无法保存它 我使用 pytho
  • 使用 Opencv 屏蔽水平线和垂直线

    我正在尝试删除该图像中的水平线和垂直线 以便拥有更清晰的文本区域 我正在使用下面的代码 它遵循这个guide https docs opencv org 3 2 0 d1 dee tutorial moprh lines detection
  • matplotlib x 轴时间重叠

    我用以下函数及时绘制比特率 usr bin python3 import matplotlib pyplot as plt import datetime def plotBitrate time bitrate filename time
  • Pandas 如何删除包含所需字符串的行

    我想删除包含所需字符串的所有行 假设我有以下数据框 A B C 1 a x w g n 3 l p j p v 我想删除包含字符串的所有行p 我已经搜索过它 但大多数答案都是基于列名称 就我而言 我不会知道它可以出现在任何列中 输出数据帧应
  • Python Camelot无边框表格提取问题

    我正在努力从 pdf 文件中提取一些无边框表格 如下图所示 我已经安装了 python camelot 如图所示here https github com socialcopsdev camelot并且仅适用于有边框的表格 请参阅以下详细信
  • Healpy:从数据到 Healpix 地图

    我有一个数据网格 其中行代表 theta 0 pi 列代表 phi 0 2 pi 其中 f theta phi 是该位置处暗物质的密度 我想计算它的功率谱并决定使用healpy 我无法理解的是如何格式化我的数据以供healpy 使用 如果有
  • 在空心方形层内生成随机均匀分布点的 Pythonic 方法

    假设我们有一个尺寸为 n 的空心方形薄片 也就是说 我们有一个 nxn 正方形 其中删除了 k l 矩形 1 我为 numpy 编写了这段代码 但它至少有 2 个问题 我必须丢弃大约 1 9 的所有生成点 并且删除 numpy array
  • Python shebang 线[重复]

    这个问题在这里已经有答案了 我见过有些人在 env 后面加上一个空格来写 shebang 行 例如 usr bin env python 这是拼写错误吗 我从来不使用空格 我用 usr bin env python 有人可以澄清一下吗 不
  • 如何使用 pip 安装 Openpyxl

    我有 Windows 10 64 位 我想利用Openpyxl包开始学习如何与 Excel 和其他电子表格交互 我安装了Python windowsx86 64web basedinstaller 我有 64 位操作系统 尝试安装此版本时我
  • 根据 Pandas 中用户指定的日期列和输入参数计算特定函数

    我有一个 df 如下所示 Date t factor 2020 02 01 5 2020 02 03 23 2020 02 06 14 2020 02 09 23 2020 02 10 23 2020 02 11 23 2020 02 13
  • 从列表中填充字典

    我有一个字符串列表 来自 tt文件 看起来像这样 list1 have tVERB and tCONJ tree tNOUN go tVERB 我想把它变成一本字典 如下所示 dict1 have VERB and CONJ tree NO
  • 两个或多个数据框的完全外连接

    给定以下三个 Pandas 数据框 我需要像 SQL 完全外连接一样合并它们 注意key是多索引的type N and id N with N 1 2 3 import pandas as pd raw data type 1 0 1 1
  • 导入tensorflow模块在tensorflow 2中很慢

    有关的 导入 TensorFlow contrib 模块在 TensorFlow 1 2 1 中速度很慢 https stackoverflow com questions 45093653 import tensorflow contri

随机推荐

  • T-sql、刻度、时间戳

    是否有可能在 t sql 中获得像 DateTime Ticks 这样的 C 内容 感谢帮助 您不太可能从 SQL 中获得与 DateTime Ticks 相同的精度 因为 SQL 不能以那么高的精度表达时间 SQL Server 只存储大
  • 安全网络登录示例/教程[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 为 Web 应用程序创建登录表单的方法有很多种 但大多数方法都存在这样或那样的缺陷 密码以明文形式传输
  • 跨浏览器 SVG keepAspectRatio

    我正在尝试有一个SVG里面的图形 img 适合 不裁剪 标签内部且保留宽高比的标签 我创建了SVG在 Inkscape 中 它在所有浏览器上都按预期工作 除了互联网浏览器 9 为了让它发挥作用IE 9我必须添加viewBox 0 0 580
  • pyspark。数据框中的 zip 数组

    我有以下 PySpark DataFrame id data 1 10 11 12 2 20 21 22 3 30 31 32 最后 我想要以下 DataFrame id data
  • 递归读取任何 java 对象并将复杂类型提取到哈希映射中

    我需要编写一个实用程序 它接受空白 HashMap 和任何对象作为参数并返回 HashMap public HashMap returnMap HashMap map Object parseThisObject logic to stri
  • 使用包含空值列的 WHERE 子句的更新语句

    我正在使用另一个表中的数据更新一个表上的列 这WHERE子句基于多个列 并且某些列为空 根据我的想法 这个空值是什么throwing off你的标准UPDATE TABLE SET X Y WHERE A B陈述 See 这个 SQL 小提
  • MVC中无法从ViewBag中提取数据

    我试图在提交之前从 ViewBag 中提取数据并通过 JS 将其插入表单隐藏字段中 这不起作用 在调试时 我发现 JS 表达式的一部分被忽略了 因此 var 被评估为空字符串 这是 JS 部分 它应该执行分配 function setid
  • 多租户 Rails 应用:不同技术的优缺点是什么?

    我最初是为一位客户编写 Ruby on Rails 应用程序的 现在 我正在更改它 以便它可以用于不同的客户 我的最终目标是某些用户 不是我 可以单击按钮并创建一个新项目 然后生成所有必要的更改 新架构 新表 代码处理 无需任何人需要我编辑
  • 在 CentOS 中安装 PHP Zip 扩展

    我正在尝试在 CentOS 中安装 PHP Zip 扩展 我的服务器没有外部互联网访问权限 所以我自己从 PECL 下载了它 http pecl php net package zip http pecl php net package z
  • 我需要改变什么才能正确实施 SOLID 设计?

    我正在尝试学习 SOLID 设计 但我认为我犯了一个错误 我认为IItem界面不遵循里氏替换原则在我的内Player但是 我不知道如何解决这个问题 如果我从 IItem 添加新的界面绘图 我将必须更改 Player 的方法以添加一个案例来处
  • 如何在启用 Hyper-V 的情况下使用 Kitematic?

    我已经安装了适用于 Windows 的 Docker 运行 Windows 10 开箱即用时 Docker 不会在 Hyper V 上安装映像 但我能够让它工作 Edit 我通过此屏幕上的链接获取了 Kitematic 单击下载后 我通过
  • 将 C# 中的 asmx web 服务的 Soap 请求标头从 text/xml 更改为soap/xml

    我需要调用网络服务 我生成了一个代理并调用了该方法 但它一直失败 因为 API 期望标头中包含soap xml 而 Visual Studio 中生成的代理客户端则在标头中发送文本 xml 问题 是否可以更改生成的代理客户端的 Conten
  • 将字符串的第一个字母大写(前面带有特殊字符) - PHP

    我想将字符串大写 例如 hello 我希望我的函数返回 Hello 我尝试过使用 regex 和 preg match 但没有运气 这是我之前的问题 与此相关 preg match 正在匹配两个字符 而它应该只匹配一个字符 https st
  • 如何使用自定义源正确设置 Amazon Route 53、CloudFront

    我目前正在使用亚马逊 53 号公路用于我的 DNS 设置和自定义源 亚马逊外部的 Web 服务器 我想补充一下云锋混合但我不太确定如何设置它 我已经看过 Amazon 关于使用 Route 53 和 CloudFront 设置 S3 的指南
  • Xcode MyProjectName-Bridging-Header.h 不存在

    我想开始在我的 Objective C 项目中使用 Swift 所以我添加了一个快速类 import Foundation objc class System NSObject objc func printSome println Pri
  • Apress Pro Asp.net MVC Framework 3 - SportsStore 编辑产品无法正常工作?

    大家好 有人购买了 Apress Pro Asp net MVC Framework 3 的 ALPHA 并创建了 SportsStore 吗 我无法终生编辑产品并成功更新数据库吗 没有显示错误 单元测试全部功能 但没有成功的 编辑 即我更
  • 如何让 Laravel“确认”验证器将错误添加到确认字段?

    默认情况下 Laravel 确认 验证器将错误消息添加到原始字段 而不是通常包含确认值的字段 password gt required confirmed min 8 是否有任何简单的方法来扩展验证器或使用一些技巧来强制它始终在确认字段而不
  • WebApi 添加另一个 Get 方法

    我有一个非常标准的 WebApi 可以执行一些基本的 CRUD 操作 我正在尝试添加一些不同类型的查找 但不太确定它应该如何完成 这是我目前的FoldersController public class FoldersController
  • file_get_contents,HTTP 请求失败

    我尝试使用以下方式从另一个网站获取内容file get contents但我总是收到 无法打开流 HTTP 请求失败 allow url fopen 已打开 并且我已经在防火墙关闭的情况下进行了测试 但还是会出现这种情况 请问还有什么原因呢
  • Asyncio 中的无限循环或“递归”

    我是 Python3 asyncio 的新手 我有一个函数可以不断地从 websocket 连接检索消息 我想知道我是否应该使用while True循环或asyncio ensure future以递归方式 哪个是首选还是不重要 Examp