Python 3.5 async for 阻止 ioloop

2024-01-22

我有一个带有两个处理程序的简单 aiohttp 服务器。 第一个在中进行一些计算async for环形。第二个仅返回文本响应。not_so_long_operation以最慢的递归实现返回第 30 个斐波那契数,大约需要一秒钟。

def not_so_long_operation():
    return fib(30)

class arange:
    def __init__(self, n):
        self.n = n
        self.i = 0

    async def __aiter__(self):
        return self

    async def __anext__(self):
        i = self.i
        self.i += 1
        if self.i <= self.n:
            return i
        else:
            raise StopAsyncIteration

# GET /
async def index(request):
    print('request!')
    l = []
    async for i in arange(20):
        print(i)
        l.append(not_so_long_operation())

    return aiohttp.web.Response(text='%d\n' % l[0])

# GET /lol/
async def lol(request):
    print('request!')
    return aiohttp.web.Response(text='just respond\n')

当我试图获取时/进而/lol/,只有当第一个完成时,它才会给我第二个响应。
我做错了什么以及如何使索引处理程序在每次迭代时释放 ioloop?


你的例子没有屈服点 (await语句)用于任务之间的切换。 异步迭代器allows to use await inside __aiter__/__anext__但不要将其自动插入到您的代码中。

Say,

class arange:
    def __init__(self, n):
        self.n = n
        self.i = 0

    async def __aiter__(self):
        return self

    async def __anext__(self):
        i = self.i
        self.i += 1
        if self.i <= self.n:
            await asyncio.sleep(0)  # insert yield point
            return i
        else:
            raise StopAsyncIteration

应该按您的预期工作。

在实际应用中很可能你不需要await asyncio.sleep(0)调用,因为您将等待数据库访问和类似的活动。

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

Python 3.5 async for 阻止 ioloop 的相关文章

随机推荐

  • 经常使用很少定义的术语:左值

    什么是左值 An lvalue是一个可以分配给以下对象的值 lvalue rvalue 它是 左值 或 左手值 的缩写 基本上就是left of the 符号 即您分配的值 作为一个例子 什么是not左值 即仅右值 printf Hello
  • 使用 dplyr 时使用 rle 按运行进行分组

    在 R 中 我想根据变量的运行对数据进行分组后对其进行汇总x 又名每组数据对应于数据的一个子集 其中连续x值是相同的 例如 考虑以下数据框 我想在其中计算平均值y每次运行中的值x dat lt data frame x c 1 1 1 2
  • 您可以对一系列项目进行并行增量构建吗?

    是否可以获取项目列表并仅在它们不是最新的情况下并行构建它们
  • ruby 数组到 javascript - Rails

    我正在尝试将 ruby 数组传递给 js 视图 js erb格式 但它根本不起作用 var array 变量array只是设置为string其中包含数组的所有值 有没有办法保持数组格式 Edit 我刚刚意识到这是因为我的数组格式 label
  • 如何让工具提示出现在弹出窗口中?

    在我的机器上 此代码在将鼠标悬停在引导字形图标上时生成一个工具提示 span class glyphicon glyphicon info sign tt title span 但是 当我将工具提示堆叠在弹出窗口内时 用于自行生成工具提示的
  • 如果是HTTPS请求,如何在node.js中找到远程地址?

    你好 在node js中 如果是http请求 我可以在req connection remoteAddress处获取remoteAddress 那么 如果是https请求 如何获取呢 我发现有 req socket remoteAddres
  • 如何使用 cxf 组件使用 Apache Camel 调用第三方 Web 服务

    我浏览了 Apache Camel 网站和 Camel in Action 上的示例 两者都重点关注公开 Web 服务 我在网上找到的唯一示例不起作用 我正在尝试访问第三方网络服务 wsdl http www webservicex net
  • 从表格中删除内容并重新格式化表格

    我想要做 我的页面以以下格式显示表格的数据 有什么方法可以删除具有空白值的内容并重新格式化表格 如下所示 额外细节 实际表格中的任何值都可能为空白 请参阅第一张图片 我想删除那个特定的Test行 具有空白值 并通过均匀分布剩余内容来重新格式
  • SBT 挂起等待孤立子进程完成

    在我的 SBT 0 13 16 版本中 我有以下任务 startThing var bin path s file getAbsolutePath bin val result s bin path start thing if resul
  • iOS 5:您可以覆盖特定类中的 UIAppearance 自定义吗?

    我正在构建一个带有许多视图控制器的应用程序 我有一个UITabBarController其中容纳 4UINavigationController 我希望所有导航栏都是我的自定义颜色 比如蓝色 我通过在应用程序委托中执行此操作来实现 UINa
  • 设置鼠标位置

    我需要能够将鼠标位置设置到屏幕 窗口的中间 我怎样才能做到这一点 该文档似乎表明CGDisplay移动光标到点 http developer apple com library mac documentation GraphicsImagi
  • Git 远程恢复

    我是 Git 新手 正在使用 WebStorm 来推送和拉取我的代码 我们正在开展一个共同的项目 昨晚我的朋友更新了一些代码并推送了更改 今天 我拉取了代码并合并了更改 但我错误地保留了更改并放弃了拉取请求提供的更改 然后将这些更改推送到
  • 如何获取 Laravel CSRF-token 以通过 React 中的 fetch post 请求发送它?

    我正在使用开发网络应用程序创建反应应用程序和拉维尔 创建反应应用程序在 localhost 3000 上运行开发项目 而 laravel 后端在 localhost 8080 上运行 这是我的代码的一部分 const onSubmit e
  • 修复了 Highcharts 中的 y 轴标签宽度

    我正在构建一个数据演示 其中两个 Highcharts 图表垂直堆叠 旨在共享相同的 x 轴单位和对齐方式 就像这样 请注意 由于两个图表的 y 轴范围不同 因此 y 轴标签的宽度不同 因此图表本身的宽度略有不同 破坏了良好的 x 轴对齐
  • 如何让 System.Net.Http.HttpClient 不遵循 302 重定向?

    Using 来自 NuGet 的 HttpClient http nuget org packages HttpClient 应用程序使用 client PostAsync 发送帖子 我希望它不遵循 302 重定向 how 我想我可以设置A
  • 将元描述和开放图谱协议描述合并到一个标签中

    是否可以将元描述和开放图协议描述结合起来 当它们包含相同的内容时合而为一 是的 您可以将它们结合起来 为了测试它 我制作了下面的简单 HTML 页面 将其上传到服务器 然后通过 Facebook 运行该页面网址检查器 https
  • 更新 LayoutView 的模型

    JSBin 链接 http jsbin com rosadomisa edit html js console output 单击 Clicks 链接可查看显示更新后的模型数据的控制台 但原始显示的 HTML 不会更改 更新 LayoutV
  • 将 Windows 对话框错误消息重定向到控制台

    有谁知道如何重定向 捕获模式 Windows 错误对话框 对于仅尝试运行程序并捕获退出代码和 stdout stderr 输出的非交互式命令行程序来说 这确实是个问题 此问题的最新实例是一个模态 Windows 对话框 其形式如下 The
  • AWS S3 最大文件和上传大小

    AWS S3 文档说 单个 Amazon S3 对象的大小范围最小为 0 字节到最大 5 TB 最大的物体可以 一次 PUT 上传的大小为 5 GB 如果我只能上传 5GB 的文件 如何存储 5TB 的文件 根据文档here http do
  • Python 3.5 async for 阻止 ioloop

    我有一个带有两个处理程序的简单 aiohttp 服务器 第一个在中进行一些计算async for环形 第二个仅返回文本响应 not so long operation以最慢的递归实现返回第 30 个斐波那契数 大约需要一秒钟 def not