缓存和重用函数会导致 Tornado

2024-01-19

我有一个昂贵的功能要包含在我的 Tornado 应用程序中。功能 返回多个输出,但由于遗留原因,这些输出被访问 分别通过不同的处理程序。

有没有办法只执行一次函数,然后将结果重复使用 不同的处理程序并保留 Tornado 的异步行为?

from tornado.web import RequestHandler
from tonado.ioloop import IOLoop

# the expensive function
def add(x, y):
    z = x + y
    return x, y, z

# the handlers that reuse the function
class Get_X(RequestHandler):
    def get(self, x, y):
        x, y, z = add(x, y) 
        return x

class Get_Y(RequestHandler):
    def get(self, x, y):
        x, y, z = add(x, y) 
        return y

class Get_Z(RequestHandler):
    def get(self, x, y):
        x, y, z = add(x, y) 
        return z

# the web service
application = tornado.web.Application([
    (r'/Get_X', Get_X),
    (r'/Get_Y', Get_Y),
    (r'/Get_Z', Get_Z),
])

application.listen(8888)
IOLoop.current().start()

我考虑过将函数的结果缓存在字典中,但我不确定如何让其他两个处理程序等待,而第一个处理程序创建一个字典条目。


Tornado Futures是可重复使用的,所以你可以简单地保存Future在屈服之前。许多现成的缓存装饰器(例如 python 3.2 的functools.lru_cache如果你把它们放在前面就会起作用@gen.coroutine:

import functools
from tornado import gen
from tornado.ioloop import IOLoop

@functools.lru_cache(maxsize=100)
@gen.coroutine
def expensive_function():
    print('starting expensive_function')
    yield gen.sleep(5)
    return 1, 2, 3

@gen.coroutine
def get_x():
    print('starting get_x')
    x, y, z = yield expensive_function()
    return x

@gen.coroutine
def get_y():
    print('starting get_y')
    x, y, z = yield expensive_function()
    return y

@gen.coroutine
def get_z():
    print('starting get_z')
    x, y, z = yield expensive_function()
    return z

@gen.coroutine
def main():
    x, y, z = yield [get_x(), get_y(), get_z()]
    print(x, y, z)

if __name__ == '__main__':
    IOLoop.current().run_sync(main)

Prints:

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

缓存和重用函数会导致 Tornado 的相关文章

  • 使用 pythonbrew 编译 Python 3.2 和 2.7 时出现问题

    我正在尝试使用构建多个版本的 python蟒蛇酿造 http pypi python org pypi pythonbrew 0 7 3 但我遇到了一些测试失败 这是在运行的虚拟机上 Ubuntu 8 04 32 位 当我使用时会发生这种情
  • 没有名为 crypto.cipher 的模块

    我现在正在尝试加密一段时间 我最近得到了这个基于 python 的密码器 名为PythonCrypter https github com jbertman PythonCrypter 我对 Python 相当陌生 当我尝试通过终端打开 C
  • Django 代理模型的继承和多态性

    我正在开发一个我没有启动的 Django 项目 我面临着一个问题遗产 我有一个大模型 在示例中简化 称为MyModel这应该代表不同种类的物品 的所有实例对象MyModel应该具有相同的字段 但方法的行为根据项目类型的不同而有很大差异 到目
  • Django 管理员在模型编辑时间歇性返回 404

    我们使用 Django Admin 来维护导出到我们的一些站点的一些数据 有时 当单击标准更改列表视图来获取模型编辑表单而不是路由到正确的页面时 我们会得到 Django 404 页面 模板 它是偶尔发生的 我们可以通过重新加载三次来重现它
  • SQLAlchemy 通过关联对象声明式多对多自连接

    我有一个用户表和一个朋友表 它将用户映射到其他用户 因为每个用户可以有很多朋友 这个关系显然是对称的 如果用户A是用户B的朋友 那么用户B也是用户A的朋友 我只存储这个关系一次 除了两个用户 ID 之外 Friends 表还有其他字段 因此
  • 将 saxon 与 python 结合使用

    我需要使用 python 处理 XSLT 目前我正在使用仅支持 XSLT 1 的 lxml 现在我需要处理 XSLT 2 有没有办法将 saxon XSLT 处理器与 python 一起使用 有两种可能的方法 设置一个 HTTP 服务 接受
  • 使 django 服务器可以在 LAN 中访问

    我已经安装了Django服务器 可以如下访问 http localhost 8000 get sms http 127 0 0 1 8000 get sms 假设我的IP是x x x x 当我这样做时 从同一网络下的另一台电脑 my ip
  • Flask 会话变量

    我正在用 Flask 编写一个小型网络应用程序 当两个用户 在同一网络下 尝试使用应用程序时 我遇到会话变量问题 这是代码 import os from flask import Flask request render template
  • Python 函数可以从作用域之外赋予新属性吗?

    我不知道你可以这样做 def tom print tom s locals locals def dick z print z name z name z guest Harry print z guest z guest print di
  • 如何使用 OpencV 从 Firebase 读取图像?

    有没有使用 OpenCV 从 Firebase 读取图像的想法 或者我必须先下载图片 然后从本地文件夹执行 cv imread 功能 有什么办法我可以使用cv imread link of picture from firebase 您可以
  • 从 Flask 访问 Heroku 变量

    我已经使用以下命令在 Heroku 配置中设置了数据库变量 heroku config add server xxx xxx xxx xxx heroku config add user userName heroku config add
  • IO 密集型任务中的 Python 多线程

    建议仅在 IO 密集型任务中使用 Python 多线程 因为 Python 有一个全局解释器锁 GIL 只允许一个线程持有 Python 解释器的控制权 然而 多线程对于 IO 密集型操作有意义吗 https stackoverflow c
  • python获取上传/下载速度

    我想在我的计算机上监控上传和下载速度 一个名为 conky 的程序已经在 conky conf 中执行了以下操作 Connection quality alignr wireless link qual perc wlan0 downspe
  • 如何在Python中对类别进行加权随机抽样

    给定一个元组列表 其中每个元组都包含一个概率和一个项目 我想根据其概率对项目进行采样 例如 给出列表 3 a 4 b 3 c 我想在 40 的时间内对 b 进行采样 在 python 中执行此操作的规范方法是什么 我查看了 random 模
  • Fabric env.roledefs 未按预期运行

    On the 面料网站 http docs fabfile org en 1 10 usage execution html 给出这个例子 from fabric api import env env roledefs web hosts
  • 每个 X 具有多个 Y 值的 Python 散点图

    我正在尝试使用 Python 创建一个散点图 其中包含两个 X 类别 cat1 cat2 每个类别都有多个 Y 值 如果每个 X 值的 Y 值的数量相同 我可以使用以下代码使其工作 import numpy as np import mat
  • 使用 Python 绘制 2D 核密度估计

    I would like to plot a 2D kernel density estimation I find the seaborn package very useful here However after searching
  • 从列表指向字典变量

    假设你有一个清单 a 3 4 1 我想用这些信息来指向字典 b 3 4 1 现在 我需要的是一个常规 看到该值后 在 b 的位置内读写一个值 我不喜欢复制变量 我想直接改变变量b的内容 假设b是一个嵌套字典 你可以这样做 reduce di
  • 导入错误:没有名为 site 的模块 - mac

    我已经有这个问题几个月了 每次我想获取一个新的 python 包并使用它时 我都会在终端中收到此错误 ImportError No module named site 我不知道为什么会出现这个错误 实际上 我无法使用任何新软件包 因为每次我
  • Python Selenium:如何在文本文件中打印网站上的值?

    我正在尝试编写一个脚本 该脚本将从 tulsaspca org 网站获取以下 6 个值并将其打印在 txt 文件中 最终输出应该是 905 4896 7105 23194 1004 42000 放置的动物 的 HTML span class

随机推荐

  • 如何将命令嵌入到 bash 中作为内置命令? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我使用 C 编程语言创建了一个命令行实用程序 现在我想将该命令嵌入到 bash 中 它应该充当 bash 内置命令 cd 我怎样才能做
  • 如何在 bash 下获得两个日期之间的差异[重复]

    这个问题在这里已经有答案了 正如问题听起来一样 我想从 20120203 中减去 20120115 并得到 19 作为答案 在 shell 脚本中实现此功能的最佳方法是什么 let DIFF date s d 20120203 date s
  • Python:将列表分解为所有可能的子列表

    假设我有一个整数列表 mylist 101 102 103 104 105 106 现在我需要创建每个可能的子列表划分 保留顺序 sublists 101 102 103 104 105 106 101 102 103 104 105 10
  • Java 默认方法比抽象类中的相同代码慢

    我有一个界面PackedObject public interface PackedObject int get int sum void setIndex int index default int defaultSum return g
  • 尝试进行深度附加时帧缓冲区状态错误(返回 36054)

    下面是为阴影映射设置帧缓冲区的代码 但在检查帧缓冲区状态时返回 36054 有任何想法吗 bind framebuffer for shadow mapping gl glGenFramebuffers 1 framebuff gl glB
  • 如何声明在 kotlin 伴随对象中声明的本机 cpp 方法?

    我有一个 Kotlin 类 它只声明一些用于 Kotlin 和 C C 交互的方法 class JNILib companion object external fun getAppId String init System loadLib
  • 是否可以隐藏 asp:repeater 中的列?

    我需要隐藏一列asp repeater 最好将它们隐藏在服务器端 而不仅仅是通过 CSS 在 HTML 中 中继器有一个ID 但我很难在调试器中找到它拥有的表 考虑到中继器的工作原理 我不确定它是否可能 我给了 HTMLtable an I
  • Java 中的流如何影响内存消耗?

    我已经多次使用流 但我从来没有读过太多关于它们实际工作原理的内容 除了流只是一个隐喻之外 我对它们也了解不多 流仅表示字节序列 我不太了解它们的实际工作原理 我猜想在 Java 中打开文件流与具有向流提供 指针 功能的操作系统进行交互 基本
  • 最小起订量静态类中的静态方法

    public Product GetbyID int id try mycode Product p catch DataAccessException ex throw new BusinessException ex ErrorCode
  • 为什么 Composer 无法正确安装 Laravel 5.6? [复制]

    这个问题在这里已经有答案了 我无法在我的电脑上安装 Laravel 5 6wamp服务器 我有以下设置 PHP 版本 7 1 3 作曲家版本1 6 3 2018 01 31 当我尝试通过 Composer 安装 Laravel 应用程序时
  • iPhone 单元测试

    我在大学的 iPhone 开发人员上完成了我的项目 没有做 有用的 单元测试 做了一些简单的测试只是为了放在我的报告上 我正在研究苹果的单元测试套件 逻辑和应用程序测试 但最终使用了 google toolbox for mac 中的 iP
  • 从 localStorage 保存和加载图像

    所以基本上 我试图将图像保存到localStorage 然后在下一页上加载相同的图像 我遇到了这个很好的例子 http jsfiddle net 8V9w6 http jsfiddle net 8V9w6 不过 我完全不知道这是如何工作的
  • 如何在没有表单标签的情况下更改 Mobile Safari 键盘中的返回键文本?

    我想更改 返回 按钮上的文本移动Safari当我的输入元素聚焦时的键盘 我知道你可以这样做
  • 如何继续处理 pandas fillna 中的“None”值

    我有以下字典 fillna value first name Andrii last name Furmanets created at None 当我把那本字典传给fillna I see raise ValueError 必须指定填充方
  • 如何写出 HTML 实体名称( 、<、> 等)

    我如何在 HTML 中编写实体名称而不让它执行其功能 示例 我正在做一个教程 想告诉某人如何在代码中使用不间断空格 nbsp 那么 如何实际写出 n b s p 但它是否流畅且没有空格 您可以使用 amp 代替 So nbsp 将 amp
  • 检查 ArrayList 是否包含给定对象

    假设我有这样的课程 class A int elementA int elementB 我也有一个ArrayList像这样 ArrayList a listObj 如何检查该列表是否包含仅使用某些属性的对象A 例如 仅考虑elementA用
  • 如何使 TFS 2015 中的 PowerShell 任务构建失败

    我试图使 PowerShell 脚本中的某个结果在构建过程中失败 但它对我不起作用 我正在使用 TFS 2015 中的新构建操作并尝试了以下选项 记录命令 https github com Microsoft vso agent tasks
  • nginx 静态索引重定向

    这看起来很荒谬 但我在一个多小时的搜索中没有找到有效的答案 我有一个运行 nginx 的静态网站 恰好位于 Varnish 后面 索引文件称为index html 我想重定向实际访问该 URL 的任何人mydomain com index
  • 计算图像特征配准中的仿射变换矩阵

    我有两张图像 一张是对另一张应用仿射变换的结果 我可以通过使用 OpenCV 中的 ORB create 函数提取点来使用单应性注册它们 但是 我想计算此变换所需的仿射矩阵 有什么方法可以简单地通过两张图像来做到这一点吗 检测旋转的矩形并使
  • 缓存和重用函数会导致 Tornado

    我有一个昂贵的功能要包含在我的 Tornado 应用程序中 功能 返回多个输出 但由于遗留原因 这些输出被访问 分别通过不同的处理程序 有没有办法只执行一次函数 然后将结果重复使用 不同的处理程序并保留 Tornado 的异步行为 from