性能:具有由工作池处理的阻塞任务的异步请求处理程序

2023-12-23

该脚本的性能如何:http://tornadogists.org/2185380/ http://tornadogists.org/2185380/复制如下。

from time import sleep
from tornado.httpserver import HTTPServer
from tornado.ioloop import IOLoop
from tornado.web import Application, asynchronous, RequestHandler
from multiprocessing.pool import ThreadPool

_workers = ThreadPool(10)

def run_background(func, callback, args=(), kwds={}):
    def _callback(result):
        IOLoop.instance().add_callback(lambda: callback(result))
    _workers.apply_async(func, args, kwds, _callback)

# blocking task like querying to MySQL
def blocking_task(n):
    sleep(n)
    return n

class Handler(RequestHandler):
    @asynchronous
    def get(self):
        run_background(blocking_task, self.on_complete, (10,))

    def on_complete(self, res):
        self.write("Test {0}<br/>".format(res))
        self.finish()

HTTPServer(Application([("/", Handler)],debug=True)).listen(8888)
IOLoop.instance().start()
  1. 我的申请将会结束1,000 请求/秒.
  2. Each request will last from 2-30 seconds, averaging about 6 seconds
    • 简单地平均sleep(6)
  3. 通过使用类似的方法来阻止 IOredis BLPOP or Queue.get_nowait()

总体模式很好,但需要注意的是,由于 GIL,您的线程池将只能使用单个 CPU,并且您需要使用多个进程来充分利用可用的硬件。

仔细看看这些数字,如果您的请求确实平均每个请求需要 6 秒,那么 10 个线程就太小了。每秒都有 6000 秒的工作量,因此您的所有进程总共需要至少 6000 个线程(假设这 6 秒实际上只是阻塞外部事件以及 python 进程中的 CPU 成本)是可以忽略不计的)。我不确定现代系统可以处理多少个线程,但 6000 个 Python 线程听起来并不是一个好主意。如果每个请求确实有 6 秒的阻塞(以及每秒数千个请求),那么将这些阻塞函数转换为异步函数似乎是值得的。

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

性能:具有由工作池处理的阻塞任务的异步请求处理程序 的相关文章

  • Django:模拟模型上的字段

    如何将模拟对象分配给该模型上的用户字段 无论如何都要绕过 SomeModel user 必须是 User 实例 检查吗 class SomeModel models Model user models ForeignKey User 我不会
  • 从Python中的字符串中提取货币金额

    我正在制作一个程序 从字符串中获取货币并将其转换为其他货币 例如 如果字符串是 the car cost me 13 250 我需要得到 and 13250 我已经有了这个正则表达式 1 确实如此 但是该字符串很有可能有多个价格 并且全部使
  • Python有条件求解时滞微分方程

    我在用dde23 of pydelay包来求解延迟微分方程 我的问题 如何有条件地编写方程 例如目标方程有两个选项 when x gt 1 dx dt 0 25 x t tau 1 0 pow x t tau 10 0 0 1 x othe
  • Python从int到string的快速转换

    我正在用 python 求解大量阶乘 并发现当我完成计算阶乘时 需要相同的时间才能转换为字符串以保存到文件中 我试图找到一种将 int 转换为字符串的快速方法 我将举一个计算和 int 转换时间的例子 我正在使用通用的 a str a 但感
  • Jupyter Notebooks 不显示进度条

    我正在尝试在 Jupyter 笔记本中显示进度条 这是一台新电脑 我通常做的事情似乎不起作用 from tqdm import tqdm notebook example iter 1 2 3 4 5 for rec in tqdm not
  • TF map_fn 或 while_loop 用于不同形状的张量列表

    我想处理不同形状的张量序列 列表 并输出另一个张量列表 考虑每个时间戳上具有不同隐藏状态大小的 RNN 就像是 输入 tf ones 1 2 2 tf ones 2 2 3 tf ones 3 2 1 输出 tf zeros 1 2 4 t
  • 使用 Django Rest 保存 Base64ImageField 类型会将其保存为原始图像。如何将其转换为普通图像

    我的模型中有 5 个图像字段 imageS imageS imageS imageS 和 imageE 我正在尝试按以下方式保存图像 图像的类型Base64ImageField images imageA imageB imageC ima
  • Tweepy StreamListener 到 CSV

    我是 python 新手 我正在尝试开发一个应用程序 使用 Tweepy 和 Streaming API 从 Twitter 检索数据并将数据转换为 CSV 文件 问题是此代码不会创建输出 CSV 文件 也许是因为我应该将代码设置为在实现例
  • 更改 python tkinter canvas 中的线坐标

    我画了一条线tkinter Canvas现在我想移动一端 这可能吗 例如和itemconfig import tkinter tk tkinter Tk canvas tkinter Canvas tk canvas pack line c
  • Apache Spark 中的高效字符串匹配

    我使用 OCR 工具从屏幕截图中提取文本 每个大约 1 5 句话 然而 当手动验证提取的文本时 我注意到时不时会出现一些错误 鉴于文本 你好 我真的很喜欢 Spark 我注意到 1 像 I 和 l 这样的字母被 替换 2 表情符号未被正确提
  • 动态 __init_subclass__ 方法的参数绑定

    我正在尝试让类装饰器工作 装饰器会添加一个 init subclass 方法到它所应用的类 但是 当该方法动态添加到类中时 第一个参数不会绑定到子类对象 为什么会发生这种情况 举个例子 这是可行的 下面的静态代码是我试图最终得到的示例 cl
  • Python多处理错误“ForkAwareLocal”对象没有属性“连接”

    下面是我的代码 我面临着多处理问题 我看到这个问题之前已经被问过 我已经尝试过这些解决方案 但它似乎不起作用 有人可以帮我吗 from multiprocessing import Pool Manager Class X def init
  • PyTorch DataLoader 对并行运行的批次使用相同的随机种子

    有一个bug https tanelp github io posts a bug that plagues thousands of open source ml projects 在 PyTorch Numpy 中 当并行加载批次时Da
  • 将文本注释到轴并对齐为圆

    我正在尝试在轴上绘制文本并将该文本与圆对齐 更准确地说 有一些具有不同坐标 x y 的点位于该圆内 并使用以下命令创建 ax scatter x y s 100 我想用圆圈连接并标记每个点 Cnameb 文本的坐标由 xp yp 定义 因此
  • 检测 IDLE 的存在/如何判断 __file__ 是否未设置

    我有一个脚本需要使用 file 所以我了解到 IDLE 没有设置这个 有没有办法从我的脚本中检测到 IDLE 的存在 if file not in globals file is not set 如果你想做一些特别的事情 file 未设置
  • 如何使用 matplotlib 为圆柱体的每个单独面添加颜色

    我正在尝试为圆柱体的每个面着色 但是我不确定如何进行 我尝试了以下方法 for i in range 10 col append for i in range 10 for j in range 20 col i append plt cm
  • 在 virtualenvwrapper 中激活环境

    我安装了virtualenv and virtualenvwrapper用这个命令我创建了一个环境 mkvirtualenv cv 它有效 创建后我就处于新环境中 现在我重新启动了我的电脑 我想activate又是那个环境 但是怎么样 我使
  • 为什么 smtplib.SMTP().sendmail 不发送 DKIM 签名邮件

    我已经在服务器上设置了 postfix 以及 openDKIM 当我跑步时 echo Testing setup mail s Postfix test my email address 我收到电子邮件 邮件标题中有一个DKIM Signa
  • 如何在单元测试中使用 JSON 发送请求

    我的 Flask 应用程序中有在请求中使用 JSON 的代码 我可以像这样获取 JSON 对象 Request request get json 这一直工作得很好 但是我正在尝试使用 Python 的 unittest 模块创建单元测试 但
  • python sklearn中的fit方法

    我问自己关于 sklearn 中拟合方法的各种问题 问题1 当我这样做时 from sklearn decomposition import TruncatedSVD model TruncatedSVD svd 1 model fit X

随机推荐

  • 如何将连字符后的第一个字母大写,即 Adam Smith-Jones

    我正在寻找一种将字符串的第一个字母大写的方法 包括名称由连字符连接的位置 例如 adam smith jones 需要是 Adam Smith Jones ucwords or ucfirst 如果我把它们分成名字和姓氏 只有亚当 斯密 琼
  • Rabbitmq:代理重启后未确认的消息不会消失

    我们观察到了 RabbitMQ 的以下行为 并试图了解它是否正确以及如何解决它 设想 持久 消息被传递到持久队列中 单个 消费者 Spring AMQP 获取消息并开始处理 gt 消息从 READY 变为 UNACK 现在代理已关闭 gt
  • 使用键值存储实现的图数据库

    我需要一个图形数据库 该数据库需要备份并可能在较低的抽象级别进行访问 为了负载平衡 它也必须是分布式的 单个主复制就可以 我知道可以使用自引用键值存储来实现图形数据库 Git 对象数据库就是这种模式的一个示例 我发现大多数图数据库令人沮丧的
  • 使用Python的h5py包读取hdf文件时出错

    我想从我下载的 hdf 文件中提取数据 MODIS http modis atmos gsfc nasa gov MOD08 M3 acquiring html网站 链接中提供了示例文件 我正在使用以下代码行读取 hdf 文件 gt gt
  • render() 中的 React 函数

    在 React 组件中放置函数的位置是否有偏好 我仍在学习 React 所以只是想找出最佳实践 class Content extends React Component What is the difference between put
  • 应用内购买自动续费交易恢复问题

    我正在开发一个应用程序 用户可以在其中购买自动续订订阅 购买部分工作正常 但当用户删除应用程序并尝试恢复其购买时会出现问题 以下是我为处理该问题而编写的代码 我已经给出了一个标题为 已经是订阅者 的按钮 当用户点击时 我调用以下代码 SKP
  • 致命错误:调用未定义的函数 mb_strlen()

    我正在尝试建立一个捐赠中心 我使用 Totorialzine 的源代码 到目前为止 一切对我来说都工作得很好 但唯一的问题是我一直在努力解决并试图查看一整天 并且无法准确地弄清楚代码到底出了什么问题 这是当我的访客捐赠时我在页面上提交评论时
  • 如何为Java源代码创建数据流程图

    我用 java 编写了一个包含大约 500 个类的应用程序 现在我知道这个问题已经被问过很多次了 但我仍然找不到合适的资源或教程来为我的整个项目创建数据流程图 任何帮助 教程 资源或代码示例将不胜感激 您也许能够从单元测试中导出数据流 如果
  • 垂直分隔线 CSS

    我正在创建一个垂直分隔线 效果很好 但是CSS很麻烦 CSS 是 headerDivider1 border left 1px solid 38546d height 80px position absolute right 250px t
  • 如何从文件夹中读取每个文件并为每个文件创建单独的数据帧?

    我试图让我的代码读取包含各种文件的文件夹 我希望让 Jupyter 读取该文件夹中的每个文件 并通过将文件名称作为数据帧名称来创建单独的数据帧 到目前为止我有代码 import glob path r C Users SemR Docume
  • 有没有办法使用 C# 或 vb 从 xml 递归查找最里面的节点

    我有一个 XML 文件说
  • Kubernetes 服务中端口 0 有何用途? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 创建服务时 我在内部端点列表中看到一个条目 如下所示myservice sandbox cluster 0 TCP以及我明确打开的端口 端
  • log_file 命令不记录 Expect 脚本中命令的输出

    我正在运行调试命令以将命令的输出记录到文件中 我尝试了 log file 命令 但它没有记录输出 我的代码如下 log file a gdb txt send debugulator sh file mns20 r log user 0 e
  • 当自定义验证器使用 @Component 注释时,JSR-303 验证将被忽略

    我注意到 当使用注释的自定义 Validator bean 时 JSR 303 验证在 Spring 中被完全忽略 Component被宣布 有趣的是 所述自定义验证器甚至不需要由任何类填写或使用 事实上 Spring 扫描其组件似乎足以使
  • Google 用户消息传递平台和 Objective C 到 Swift

    因此 我已经尝试了一个多星期来让谷歌用户消息传递平台正常工作 这个问题将在接下来的几周 几个月内到处出现 问题是启动guid是用obj C写的 我看不懂 我已经设法将 obj C 代码插入到我的 swift 项目中 它可以运行 但在尝试呈现
  • 用于创建发布定义的 Azure DevOps REST API

    我正在尝试使用 Azure DevOps REST API 创建发布定义 我创建了一个 json 文件 其中包含请求的配置详细信息 创建发布定义时出现以下错误 id 1 innerException null message Workflo
  • 在 WPF UserControl 上应用样式时出现问题

    我有一个用户控件 我想在其他项目中使用它 当我直接为其属性设置一些值时没有问题
  • for 每个循环无法初始化数组中的对象[重复]

    这个问题在这里已经有答案了 我会快速解决这个问题 我有一个简单的课程 class Vector float x y 另一个类有一个这些对象的数组作为其成员 Vector buffer 我这样初始化它 buffer new Vector 8
  • 如何指定_GET_MERCHANT_LISTINGS_DATA_的语言?

    最近我尝试从多个市场获取所有亚马逊列表ReportType GET MERCHANT LISTINGS DATA 对于 MarketplaceId A1PA6795UKMFR9 DE A1RKKUPIHCS9HS ES A1F83G8C2A
  • 性能:具有由工作池处理的阻塞任务的异步请求处理程序

    该脚本的性能如何 http tornadogists org 2185380 http tornadogists org 2185380 复制如下 from time import sleep from tornado httpserver