不可能通过简单地返回它们来链接本机异步协程

2024-05-26

我一直在使用 py3.4 的基于生成器的协程,并且在几个地方我通过简单地进行一个协程调用来链接它们return inner_coroutine()(如下例所示)。但是,我现在将它们转换为使用 py3.5 的本机协程,并且我发现它不再起作用,因为内部协程无法运行(请参阅运行下面示例的输出)。为了运行本机内部协程,我需要使用return await inner_coroutine()而不是原来的return inner_coroutine().

我希望本机协程的链接能够以与基于生成器的协程相同的方式工作,并且找不到任何其他说明的文档。我是否遗漏了什么或者这是本机协程的实际限制?

import asyncio

@asyncio.coroutine
def coro():
    print("Inside coro")

@asyncio.coroutine
def outer_coro():
    print("Inside outer_coro")
    return coro()

async def native_coro():
    print("Inside native_coro")

async def native_outer_coro():
    print("Inside native_outer_coro")
    # return await native_coro()  # this works!
    return native_coro()

loop = asyncio.get_event_loop()
loop.run_until_complete(outer_coro())
loop.run_until_complete(native_outer_coro())

以及运行该示例的输出:

Inside outer_coro
Inside coro
Inside native_outer_coro
foo.py:26: RuntimeWarning: coroutine 'native_coro' was never awaited
loop.run_until_complete(native_outer_coro())

这与另一个答案的内容相同,但以我认为作为对问题的回答更容易理解的方式表述。

python 判断某个东西是生成器还是普通函数的方法是看它是否包含yield陈述。 这会产生歧义@asyncio.coroutine。 你的协程是立即执行还是等待调用者调用next生成的生成器对象取决于您的代码是否实际上碰巧包含yield statement。 本机协程在设计上明确是生成器,即使它们不碰巧包含任何等待语句。 这提供了可预测的行为,但不允许您使用的链接形式。 你可以像你指出的那样

    return await inner_coroutine()

但请注意,在该等待语法中,在事件循环中执行外部协程时会调用内部协程。然而,使用基于生成器的方法并且没有yield,内部协程是在实际将协程提交到事件循环时构建的。 在大多数情况下,这种差异并不重要。

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

不可能通过简单地返回它们来链接本机异步协程 的相关文章

  • 使用 psycopg2 在 python 中执行查询时出现“编程错误:语法错误位于或附近”

    我正在运行 Python v 2 7 和 psycopg2 v 2 5 我有一个 postgresql 数据库函数 它将 SQL 查询作为文本字段返回 我使用以下代码来调用该函数并从文本字段中提取查询 cur2 execute SELECT
  • 将 Matplotlib 误差线放置在不位于条形中心的位置

    我正在 Matplotlib 中生成带有错误栏的堆积条形图 不幸的是 某些层相对较小且数据多样 因此多个层的错误条可能重叠 从而使它们难以或无法读取 Example 有没有办法设置每个误差条的位置 即沿 x 轴移动它 以便重叠的线显示在彼此
  • 为 Anaconda Python 安装 psycopg2

    我有 Anaconda Python 3 4 但是每当我运行旧代码时 我都会通过输入 source activate python2 切换到 Anaconda Python 2 7 我的问题是我为 Anaconda Python 3 4 安
  • 通过最小元素比较对 5 个元素进行排序

    我必须在 python 中使用元素之间的最小比较次数来建模对 5 个元素的列表进行排序的执行计划 除此之外 复杂性是无关紧要的 结果是一个对的列表 表示在另一时间对列表进行排序所需的比较 我知道有一种算法可以通过 7 次比较 总是在元素之间
  • Django:按钮链接

    我是一名 Django 新手用户 尝试创建一个按钮 单击该按钮会链接到我网站中的另一个页面 我尝试了一些不同的例子 但似乎没有一个对我有用 举个例子 为什么这不起作用
  • python 相当于 R 中的 get() (= 使用字符串检索符号的值)

    在 R 中 get s 函数检索名称存储在字符变量 向量 中的符号的值s e g X lt 10 r lt XVI s lt substr r 1 1 X get s 10 取罗马数字的第一个符号r并将其转换为其等效整数 尽管花了一些时间翻
  • 根据列值突出显示数据框中的行?

    假设我有这样的数据框 col1 col2 col3 col4 0 A A 1 pass 2 1 A A 2 pass 4 2 A A 1 fail 4 3 A A 1 fail 5 4 A A 1 pass 3 5 A A 2 fail 2
  • 测试 python Counter 是否包含在另一个 Counter 中

    如何测试是否是pythonCounter https docs python org 2 library collections html collections Counter is 包含在另一个中使用以下定义 柜台a包含在计数器中b当且
  • AWS EMR Spark Python 日志记录

    我正在 AWS EMR 上运行一个非常简单的 Spark 作业 但似乎无法从我的脚本中获取任何日志输出 我尝试过打印到 stderr from pyspark import SparkContext import sys if name m
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • Python 的“zip”内置函数的 Ruby 等价物是什么?

    Ruby 是否有与 Python 内置函数等效的东西zip功能 如果不是 做同样事情的简洁方法是什么 一些背景信息 当我试图找到一种干净的方法来进行涉及两个数组的检查时 出现了这个问题 如果我有zip 我可以写这样的东西 zip a b a
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 为字典中的一个键附加多个值[重复]

    这个问题在这里已经有答案了 我是 python 新手 我有每年的年份和值列表 我想要做的是检查字典中是否已存在该年份 如果存在 则将该值附加到特定键的值列表中 例如 我有一个年份列表 并且每年都有一个值 2010 2 2009 4 1989
  • 解释 Python 中的数字范围

    在 Pylons Web 应用程序中 我需要获取一个字符串 例如 关于如何做到这一点有什么建议吗 我是 Python 新手 我还没有找到任何可以帮助解决此类问题的东西 该列表将是 1 2 3 45 46 48 49 50 51 77 使用
  • Conda SafetyError:文件大小不正确

    使用创建 Conda 环境时conda create n env name python 3 6 我收到以下警告 Preparing transaction done Verifying transaction SafetyError Th
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • Python:如何将列表列表的元素转换为无向图?

    我有一个程序 可以检索 PubMed 出版物列表 并希望构建一个共同作者图 这意味着对于每篇文章 我想将每个作者 如果尚未存在 添加为顶点 并添加无向边 或增加每个合著者之间的权重 我设法编写了第一个程序 该程序检索每个出版物的作者列表 并
  • 在 Qt 中自动调整标签文本大小 - 奇怪的行为

    在 Qt 中 我有一个复合小部件 它由排列在 QBoxLayouts 内的多个 QLabels 组成 当小部件调整大小时 我希望标签文本缩放以填充标签区域 并且我已经在 resizeEvent 中实现了文本大小的调整 这可行 但似乎发生了某
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我
  • 如何将输入读取为数字?

    这个问题的答案是社区努力 help privileges edit community wiki 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 Why are x and y下面的代码中使用字符串而不是整数 注意 在Python 2

随机推荐

  • 获取保存到照片库的图像的 PHAsset/localIdentifier

    我在用着UIImageWriteToSavedPhotosAlbum https www hackingwithswift com example code media uiimagewritetosavedphotosalbum how
  • YouTube 完整的 Java 正则表达式

    我需要解析几个页面才能获取他们所有的 Youtube ID 我在网上找到了很多正则表达式 但是 Java 的正则表达式并不完整 它们要么除了 ID 之外还给我垃圾 要么错过了一些 ID 我发现似乎完整的一个是托管的here https st
  • 越狱后,iOS应用程序会以root权限运行吗?

    一旦 iOS 设备越狱 我们就可以构建越狱应用程序 使用 theos 并将其安装在 Applications预加载应用程序以 root 权限运行的目录 如果应用程序是使用 Xcode 构建的 一旦安装 它就会进入 private var m
  • 在 Twitter 上上传视频的最佳方式

    我必须从我的 java 应用程序将视频上 传到 Twitter 发布带有视频的推文文本 我使用 twitter4j 上传图像 效果很好 我对上传视频的最佳方式感到困惑 我在这个链接中找到了https github com mrisney t
  • 如何按物种矩阵显示站点内植物物种生物量?

    我之前问过 如何将两列显示为二进制 存在 不存在 矩阵 这个问题得到了两个很好的答案 我现在想更进一步 在原始站点按物种列添加第三列 该列反映每个地块中每个物种的生物量 第 1 列 地块 指定约 200 个地块的代码 第 2 列 物种 指定
  • 没有重复项的可排序 Java 集合

    我正在寻找可排序 我的意思是在初始化后排序并多次使用比较器 Java 类集合 没有重复项 有没有比编写不透明的代码更纯粹的解决方案 例如防止某些 ArrayList 添加另一个具有与已存在的值相同的值的对象 编辑1 我应该添加一些关于排序的
  • 如何使用CSS更改iframe的src

    我有这段代码 并且不知道如何制作它 因此当我单击 菜单 中的项目时 不会重定向到其他页面 而是更改 iframe 的 src 我应该更改 Code
  • Firestore从集合中获取文档ID

    我正在尝试使用 id 检索我的文档 但无法弄清楚 目前我像这样检索我的文档 const racesCollection AngularFirestoreCollection
  • 有没有好的 Clojure 基准测试?

    Edit Clojure 基准测试已达到基准游戏 http benchmarksgame alioth debian org u64q clojure html 我已经制作了这个问题社区维基并邀请其他人保持更新 有人知道 Clojure 性
  • Django 2.1 测试问题

    我正在学习 Django 我已经使用 Python 进行了几年开发 并决定开始检查这个框架 我收到了奇怪的回应 我正在编写一个测试用例 它在测试之外完美运行 这就是代码 class BoardTopicsTests TestCase Hag
  • 在 UIScrollView 中滚动时未调用 TouchBegan 方法

    我注意到 如果我立即将手指放在 UIScrollView 上并滚动 则不会调用 TouchBegan 方法 只有当我在滚动之前将手指放置一段时间后才会调用 TouchBegan 每当 UIScrollView 上有触摸时 不应该总是调用 T
  • 需要帮助打印清单

    我正在用 Python 处理待办事项列表 目前我一直在打印待办事项列表 我有我的添加代码和查看代码 if sel 1 add task name input enter task name prio input enter priority
  • UnsafePointer 在 swift 3 中不再工作

    当我从 swift 2 转换为 swift 3 后 下面提到的行会弹出一个错误 let value UnsafePointer
  • 经理游戏:如何计算市值?

    通常 足球经理游戏中的球员都有市场价值 经理们根据这些市场价值出售他们的球员 他们想 哦 这个球员值3 000 000 所以我会尝试以3 500 000的价格把他卖掉 所有球员都具备三个基本素质 强度值 1 99 他们所能达到的最大力量 1
  • 比较一个类的两个实例

    我有一堂这样的课 public class TestData public string Name get set public string type get set public List
  • 如何使用匹配(正则表达式)验证用户名?

    我试图将以下表达式放入 matches 函数中 但我猜想在尝试编译规则时会出现错误 a zA Z a zA Z0 9 a zA Z0 9 a z0 9 validate规则如下 validate newData val auth uid n
  • J中如何写一个超过3个参数的函数?

    例如 函数g x y x z 怎么写 我知道如何编写带有两个参数的函数 一种方法是使用变量匹配 f 3 0 x y z y x y x z f 1 2 3 0 5 f 1 2 3 0 5 f 1 5 2 0 5 0 5 另一种方法是将变量视
  • 将 Woocommerce 购物车项目自定义数据保存为订单项目元数据,将其显示在订单和电子邮件上

    关于 Woocommerce 我有要添加到购物车的自定义数据 在functions php 文件中 我有以下函数 Display cart item custom data in cart and checkout pages add fi
  • Android Studio 上的代码 Iris 插件

    我正在尝试使代码 iris 插件在 Android studio 上工作 我按右键单击 gt 创建代码虹膜图 然后我收到一条通知 表明我的图表已准备就绪 但我不知道该图何时存储 创建的文件的名称是什么以及如何打开它 有任何想法吗 CODE
  • 不可能通过简单地返回它们来链接本机异步协程

    我一直在使用 py3 4 的基于生成器的协程 并且在几个地方我通过简单地进行一个协程调用来链接它们return inner coroutine 如下例所示 但是 我现在将它们转换为使用 py3 5 的本机协程 并且我发现它不再起作用 因为内