进程的异步生成:设计问题 - Celery 或 Twisted

2024-04-19

全部:我正在寻求意见/指导/和设计理念。我的目标是找到一种精简但可靠的方法来从 HTTP POST 获取 XML 有效负载(这部分没有问题),对其进行解析,并异步生成一个相对寿命较长的进程。

生成的进程是 CPU 密集型进程,将持续大约三分钟。一开始我预计负载不会太大,但随着流量的增加,我很可能需要在服务器之间水平扩展负载。

我真的很喜欢 Celery/Django 堆栈的这种用途:它非常直观,并且拥有所有内置框架来完成我所需要的工作。我满怀热情地沿着这条路走下去,但很快我发现我的小型 512MB RAM 云服务器只有 100MB 的可用内存,而且我开始感觉到,一旦我的所有进程全速运行,我就会遇到麻烦。此外,它还有几个移动部件:RabbitMQ、MySQL、cerleryd、ligthttpd 和 django 容器。

我绝对可以增加服务器的大小,但我希望在该项目的早期阶段将成本降至最低。

作为替代方案,我正在考虑使用twisted 进行流程管理,并在需要时使用透视代理用于远程系统。但至少对我来说,虽然twisted很出色,但我觉得我沿着这条路做了很多事情:编写协议、回调管理、跟踪作业状态等。这里的好处非常明显 - 出色的性能,移动部件少得多,内存占用也更小(注意:我需要验证内存部分)。为此我非常偏向 Python——它比其他选择对我来说更有趣:)

我非常感谢对此的任何看法。我担心一开始就走上错误的轨道,并且稍后用生产流量重做这件事将会很痛苦。

-Matt


在我的系统上,以相当合理的默认值运行的 RabbitMQ 使用大约 2MB 的 RAM。 Celeryd用量稍多一些,但不要过量。

在我看来,与堆栈的其余部分相比,RabbitMQ 和 celery 的开销几乎可以忽略不计。如果您正在处理需要几分钟才能完成的作业,那么一旦流量增加,这些作业就会压垮您的 512MB 服务器,而不是 RabbitMQ。从 RabbitMQ 和 Celery 开始至少会让您很好地水平扩展这些工作,所以您肯定走在正确的轨道上。

当然,您可以在 Twisted 中编写自己的作业控制,但我认为它不会给您带来太大帮助。 Twisted 具有相当不错的性能,但我不认为它的性能优于 RabbitMQ 足以证明引入错误和架构限制的时间和潜力是合理的。大多数情况下,担心优化似乎是错误的。花点时间重写 RabbitMQ,努力将这三分钟的工作减少 20% 左右。或者只需每月额外花费 20 美元即可将容量翻倍。

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

进程的异步生成:设计问题 - Celery 或 Twisted 的相关文章

  • 如何从 python 发布到 hipchat

    我有一些 python 工具 我想将它们的更新发送到 hipchat 房间 我在其他地方使用 shell 脚本执行此操作 因此我知道它在我们的环境中有效 但我似乎无法将令牌推送到 hipchat API 一定是简单的事情 首先 这会正确进行
  • 按索引从下拉列表中选择第一项不起作用。未绑定方法 select_by_index

    我正在尝试单击下拉列表中的第一项 我想使用它的索引值 因为该值每次都可能不同 对于这个特定的测试 我只需要选择下拉列表中的第一项 我尝试过 Select select by index 1 我收到错误 Traceback most rece
  • 字典损坏了键的名称 [Python]

    我的问题是 当我输入带重音的输入时 字典会存储不同的键名 它会用字符代码替换重音字符 我是新来的 我接受一切帮助 感谢您的帮助 usr bin python coding utf 8 products try prodNum int raw
  • 如何设置 1dCNN+LSTM 网络(Keras)的输入形状?

    我有以下想法要实施 Input gt CNN gt LSTM gt Dense gt Output 输入有 100 个时间步长 每个步长有一个 64 维特征向量 A Conv1D层将在每个时间步提取特征 CNN 层包含 64 个滤波器 每个
  • nUnit Assert.That委托并发问题

    我的代码中遇到了一些暂时的死锁 无法解决它 简单的代码 我无法创建一个简单的调用链来重现代码InvokeChangeEvent Test public async void Test sut InvokeChangeEvent foo fi
  • 从 keras 模型中将特征提取到数据集中

    我使用以下代码 由here https github com keras team keras blob master examples mnist cnn py 运行 CNN 来训练 MNIST 图像 from future import
  • 优化Python:大数组、内存问题

    我在运行 python numypy 代码时遇到速度问题 我不知道如何让它更快 也许其他人 假设有一个表面有两个三角剖分 一个是细三角剖分 fine 有 M 个点 一个是粗剖分 有 N 个点 此外 还有每个点的粗网格数据 N 个浮点数 我正
  • matplotlib 绘图,然后等待原始输入

    我正在尝试打开一系列 png 图 我希望能够在屏幕上查看绘图 然后收到提示 等待我 按 Enter 按回车键后 应显示下一个图 我见过很多类似的问题 Matplotlib 强制绘图显示然后返回主代码 https stackoverflow
  • 如何在 Pandas 中叠加“一天”内的数据进行绘图

    我有一个数据框 里面有一些 更有意义 数据格式如下 In 67 df Out 67 latency timestamp 2016 09 15 00 00 00 000000 0 042731 2016 09 15 00 16 24 3769
  • 如何使用基于令牌的访问获取虚拟机的 GCP 配额限制

    我想使用基于令牌的访问来获取 GCP VM 限制 下面是我的Python代码 from googleapiclient import discovery from oauth2client import AccessTokenCredent
  • admin.py 用于项目,而不是应用程序

    如何指定项目级别admin py 我前段时间问过这个问题 但由于该问题缺乏活动 我刚刚获得了风滚草奖 gt Project 设置 py admin py 这就是我想要开始工作的 App admin py 我知道该怎么做 例如 admin a
  • 应用函数创建以多列作为参数的字符串

    我有一个像这样的数据框 name size type av size type 0 John 23 Qapra 22 1 Dan 21 nuk neH 12 2 Monica 12 kahless 15 我想用一个句子创建一个新列 如下所示
  • 为什么在尝试导入随机模块时会收到 TypeError: 'module' object is not callable ?

    我正在使用 Python 2 6 并尝试运行一个简单的随机数生成器程序 random py import random for i in range 5 random float 0 0 lt number lt 1 0 print ran
  • Django 项目层次结构/组织

    我是 Django 新手 正在开始一个项目 我想以正确的方式来做 我想知道您认为组织项目的最佳实践是什么 我有一些问题 如何将静态资源与Python代码分离 这样我就不会浪费时间通过Django处理静态内容 由于应用程序是可重用的模块 因此
  • 使用 python mechanize 库登录 https 站点

    我有以下代码 import requests import sys import urllib2 import re import mechanize import cookielib import json import imp prin
  • Python 正则表达式 findall

    我正在尝试使用 Python 2 7 2 中的正则表达式从字符串中提取所有出现的标记单词 或者简单地说 我想提取其中的每一段文本 p p 标签 这是我的尝试 regex ur u005B1P u005D u005B u002FP u005D
  • 用 pandas 查找树中叶节点的所有祖先

    我有一个表 有两列 父 和 子 这是从 SAP ERP 下载的 SETNODE 表 需要在 python 中创建一个数据框 其中每个级别作为其自己的列 相对于其父级和之前的所有级别 在Python 3 中 完整关系的级别数量未知 或始终变化
  • python - lxml:强制执行属性的特定顺序

    我有一个 XML 编写脚本 可以为特定的第 3 方工具输出 XML 我使用原始 XML 作为模板来确保构建所有正确的元素 但最终的 XML 看起来与原始的不同 我以相同的顺序编写属性 但 lxml 按自己的顺序编写它们 我不确定 但我怀疑第
  • 在 Python 中计算时间(datetime.timedelta?)

    我相信这对很多人来说都是理所当然的事情 但我发现自己对整个 datetime timedelta 事情感到非常困惑 本质上我在开始时给一些东西加上时间戳startTime然后我为流程结束添加时间戳endTime我试图找出 HH MM SS
  • 与 IPython 内核分离而不终止它

    有人可以告诉我如何在不终止 IPython 内核的情况下分离它吗 我在文档中看到quit 有一个参数keep kernel 但不幸的是quit keep kernel True 行不通的 如果您通过 IPython 控制台客户端连接到内核并

随机推荐

  • 单场淘汰赛 - 可能的组合数量

    单场淘汰赛中 8 人参加的组合有多少种 比赛总数为 7 场 但我还需要这组比赛的组合数量 如果玩家在树中的哪个位置开始并不重要 而只关心他 她与哪些对手战斗以及他 她能坚持多久 我们可以说左边的玩家总是获胜 然后只需计算创建的方法数量最下面
  • AzureSearch-从数据源检测索引架构时出错

    我通过 REST API 在 Azure 搜索上创建了一个数据源 我使用 API 而不是门户 因为我有一个尚未在门户上处理的 rowversion 数据类型 我可以在门户上查看数据源 当我尝试将数据源导入索引时 出现以下错误 从数据源检测索
  • gzip.open().read() 的大小参数

    当与gzipPython 中的库 我经常遇到使用 read 函数的模式如下所示 with gzip open filename as bytestream bytestream read 16 buf bytestream read IMA
  • 如何将命名范围添加到 Google apps-script 中的子段落元素

    我想在 Google 文档中实现 类似于 html span 的功能 但是每当我尝试添加NamedRange对于 Google 文档内的文本子字符串 该范围将与同一段落中的先前文本合并 结果 NamedRange适用于整个段落 这是我的测试
  • 如何检查给定值是否是通用列表?

    public bool IsList object value Type type value GetType Check if type is a generic list of any type 检查给定对象是否是列表或可以转换为列表的
  • 关于 System.Linq.Lookup 类

    我在阅读一本 C 书籍时遇到了这个课程 并有一些问题 为什么将其添加到 System Linq 命名空间而不是通常的 Collections 命名空间中 这个类背后的意图是什么 为什么这个类不适合直接实例化 这只能通过 ToLookup 扩
  • 如何根据CPU能力实现渲染器

    我想知道在 JavaScript 中实现渲染器的最佳方法是什么 这里真正重要的并不是渲染的内容部分 我更想知道何时以及如何有效地运行渲染器代码 目前 我有window setInterval renderFunc 1000 20 每 50
  • 如何向 Linq 表达式添加排序规则?

    如何实现 IQuariable 的方法如下 var trash from a in ContextBase db Users orderby a FirstName select a ToCollatedList 我想看到的结果 SELEC
  • 如何根据第一列的内容分割一个巨大的csv文件?

    我有一个 250MB 以上的巨大 csv 文件要上传 文件格式是group id application id reading数据可能看起来像 1 a1 0 1 1 a1 0 2 1 a1 0 4 1 a1 0 3 1 a1 0 0 1 a
  • 当相机断开连接时,opencv videocapture 挂起/冻结而不是返回“False”

    我正在使用 OpenCV Python 3 1 遵循此处的示例代码 http opencv python tutroals readthedocs io en latest py tutorials py gui py video disp
  • Django 应用程序不从 AWS 存储桶的媒体文件夹加载图像

    我在用着django oscar 并希望使用 AWS S3 提供我的静态文件 为了配置我的 s3 存储桶 我创建了一个名为的模块aws with conf py and utils py files 在我的网站上 当我将图像上传到产品时 它
  • 如何在 Elasticsearch NEST 中序列化 JToken 或 JObject 类型的属性?

    我正在将 Elasticsearch 引入 C API 项目 我想利用现有的 API 模型作为搜索文档 其中许多模型允许添加自定义数据点 这些是使用JObject https www newtonsoft com json help htm
  • 如何从xamarin表单应用程序将图像上传到服务器

    我正在尝试使用 post 请求将图像从我的 xamarin 表单应用程序发送到 asp net core 服务器 我需要将图像保存在某个服务器文件夹中 但我做不到 这是我在 mediaFile 中选择图像后发送图像的方法 private a
  • 如何使用 Identity Server 4 颁发基于 Windows 身份验证的访问令牌

    我的目标是保护 Web API 以便客户端只能使用 IS 基于 Windows 身份验证颁发的访问令牌来访问它 我完成了这个基本示例 http docs identityserver io en release quickstarts 1
  • 全局运算符和成员运算符的区别

    定义一个接受类的两个引用的全局运算符和定义一个仅接受正确操作数的成员运算符之间有区别吗 Global class X public int value bool operator X left X right return left val
  • Tensorflow - 保存模型

    我有以下代码 在尝试保存模型时出现错误 我可能做错了什么 我该如何解决这个问题 import tensorflow as tf data labels cifar tools read data C Users abc Desktop Te
  • 如何从 JObject 获取第一个键?

    我在用Newtonsoft Json在我的项目中 我有JObject像这样 4781 Name 1 1577 Name 2 9973 Name 3 我成功解析它JObject Parse 我需要从此 JObject 获取第一个密钥 4781
  • Javascript CRC16 示例代码或实现

    有人可以分享一个链接或示例代码来实现 JavaScript 中字符串的校验和吗 预先非常感谢 你想要什么 你需要更具体 CRC16 算法数量众多 每种算法都有自己的多项式并用于特定用途 一些 CRC16 算法非常适合创建哈希 例如 对于 R
  • 如何在ggplot2中实现手绘铅笔填充? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我发现了这篇关于可视化的精彩博客文章 http www darkhorseanalytics com b
  • 进程的异步生成:设计问题 - Celery 或 Twisted

    全部 我正在寻求意见 指导 和设计理念 我的目标是找到一种精简但可靠的方法来从 HTTP POST 获取 XML 有效负载 这部分没有问题 对其进行解析 并异步生成一个相对寿命较长的进程 生成的进程是 CPU 密集型进程 将持续大约三分钟