Python Web 服务器:如何异步处理请求

2024-01-01

我需要创建一个 python 中间件来执行以下操作:

a) 接受来自多个客户端的http get/post 请求。

b) 修改这些请求并将其分派到后端远程应用程序(通过套接字通信)。我对此远程应用程序没有任何控制权。

c) 接收来自后端应用程序的处理结果并将这些结果返回给请求客户端。

现在,客户端期待同步请求/响应场景。但后端应用程序没有同步返回结果。也就是说,某些请求的处理时间比其他请求要长得多。因此,

客户端 1:发送 http 请求 C1 --> 获取响应 R1

客户端 2:发送 http 请求 C2 --> 获取响应 R2

客户端 3:发送 http 请求 C3 --> 获取响应 R3

Python 中间件按某种顺序接收它们:C2、C3、C1。按此顺序将它们分派到后端(作为非 http 消息)。后端以混合顺序 R1、R3、R2 响应结果。 Python中间件应该将这些响应打包回http响应对象并将响应发送回相关客户端。

是否有任何示例代码可以对这种行为进行编程。似乎有 20 个不同的 python Web 框架,我很困惑哪一个最适合这种情况(会更喜欢尽可能轻量级的东西......我会认为 Django 太重了......我尝试了 Bottle ,但我不确定如何针对这种情况进行编程)。

=================================================

更新(基于下面的讨论):请求有一个请求 ID。响应有一个响应 ID(应与它们对应的请求 ID 匹配)。中间件和远程后端应用程序之间只有一个套接字连接。虽然我们可以维护一个 {request_id : ip_address} 字典,但问题是如何为正确的客户端构造 HTTP 响应对象。我认为,线程可能会解决这个问题,其中每个线程都维护自己的响应对象。


螺丝框架。这正是这样的任务asyncore http://docs.python.org/library/asyncore.html。该模块允许基于事件的网络编程:给定一组套接字,当其中任何一个上的数据准备就绪时,它会回调给定的处理程序。这样,线程就不需要只是愚蠢地等待一个套接字上的数据到达并痛苦地将其传递给另一个线程。您必须自己实现 http 处理,但可以找到相关示例。或者,您可以使用异步功能uwsgi http://projects.unbit.it/uwsgi/wiki,这将允许您的应用程序与现有的网络服务器集成,但默认情况下不与 asyncore 集成——尽管让它工作并不难。取决于具体需求。

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

Python Web 服务器:如何异步处理请求 的相关文章

  • 保存为 HDF5 的图像未着色

    我目前正在开发一个将文本文件和 jpg 图像转换为 HDF5 格式的程序 用HDFView 3 0打开 似乎图像仅以灰度保存 hdf h5py File Sample h5 img Image open Image jpg data np
  • Django 的内联管理:一个“预填充”字段

    我正在开发我的第一个 Django 项目 我希望用户能够在管理中创建自定义表单 并向其中添加字段当他或她需要它们时 为此 我在我的项目中添加了一个可重用的应用程序 可在 github 上找到 https github com stephen
  • 需要在python中找到print或printf的源代码[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在做一些我不能完全谈论的事情 我
  • 独立滚动矩阵的行

    我有一个矩阵 准确地说 是 2d numpy ndarray A np array 4 0 0 1 2 3 0 0 5 我想滚动每一行A根据另一个数组中的滚动值独立地 r np array 2 0 1 也就是说 我想这样做 print np
  • 使用Python请求登录Google帐户

    在多个登录页面上 需要谷歌登录才能继续 我想用requestspython 中的库以便让我自己登录 通常这很容易使用requests库 但是我无法让它工作 我不确定这是否是由于 Google 做出的一些限制 也许我需要使用他们的 API 或
  • 在Python中连接反斜杠

    我是 python 新手 所以如果这听起来很简单 请原谅我 我想加入一些变量来生成一条路径 像这样 AAAABBBBCCCC 2 2014 04 2014 04 01 csv Id TypeOfMachine year month year
  • 为什么 PyYAML 花费这么多时间来解析 YAML 文件?

    我正在解析一个大约 6500 行的 YAML 文件 格式如下 foo1 bar1 blah name john age 123 metadata whatever1 whatever whatever2 whatever stuff thi
  • Python 2:SMTPServerDisconnected:连接意外关闭

    我在用 Python 发送电子邮件时遇到一个小问题 me my email address you recipient s email address me email protected cdn cgi l email protectio
  • Python,将函数的输出重定向到文件中

    我正在尝试将函数的输出存储到Python中的文件中 我想做的是这样的 def test print This is a Test file open Log a file write test file close 但是当我这样做时 我收到
  • “隐藏”内置类对象、函数、代码等的名称和性质[关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我很好奇模块中存在的类builtins无法直接访问的 例如 type lambda 0 name function of module
  • Docker 中的 Python 日志记录

    我正在 Ubuntu Web 服务器上的 Docker 容器中测试运行 python 脚本 我正在尝试查找由 Python Logger 模块生成的日志文件 下面是我的Python脚本 import time import logging
  • 加快网络抓取速度

    我正在使用一个非常简单的网络抓取工具抓取 23770 个网页scrapy 我对 scrapy 甚至 python 都很陌生 但设法编写了一个可以完成这项工作的蜘蛛 然而 它确实很慢 爬行 23770 个页面大约需要 28 小时 我看过scr
  • 仅第一个加载的 Django 站点有效

    我最近向 stackoverflow 提交了一个问题 标题为使用mod wsgi在apache上多次请求后Django无限加载 https stackoverflow com questions 71705909 django infini
  • 为什么 Pickle 协议 4 中的 Pickle 文件是协议 3 中的两倍,而速度却没有任何提升?

    我正在测试 Python 3 4 我注意到 pickle 模块有一个新协议 因此 我对 2 个协议进行了基准测试 def test1 pickle3 open pickle3 wb for i in range 1000000 pickle
  • 实现 XGboost 自定义目标函数

    我正在尝试使用 XGboost 实现自定义目标函数 在 R 中 但我也使用 python 所以有关 python 的任何反馈也很好 我创建了一个返回梯度和粗麻布的函数 它工作正常 但是当我尝试运行 xgb train 时它不起作用 然后 我
  • 模拟pytest中的异常终止

    我的多线程应用程序遇到了一个错误 主线程的任何异常终止 例如 未捕获的异常或某些信号 都会导致其他线程之一死锁 并阻止进程干净退出 我解决了这个问题 但我想添加一个测试来防止回归 但是 我不知道如何在 pytest 中模拟异常终止 如果我只
  • 在 JavaScript 函数的 Django 模板中转义字符串参数

    我有一个 JavaScript 函数 它返回一组对象 return Func id name 例如 我在传递包含引号的字符串时遇到问题 Dr Seuss ABC BOOk 是无效语法 I tried name safe 但无济于事 有什么解
  • cv2.VideoWriter:请求一个元组作为 Size 参数,然后拒绝它

    我正在使用 OpenCV 4 0 和 Python 3 7 创建延时视频 构造 VideoWriter 对象时 文档表示 Size 参数应该是一个元组 当我给它一个元组时 它拒绝它 当我尝试用其他东西替换它时 它不会接受它 因为它说参数不是
  • 使用 z = f(x, y) 形式的 B 样条方法来拟合 z = f(x)

    作为一个潜在的解决方案这个问题 https stackoverflow com questions 76476327 how to avoid creating many binary switching variables in gekk
  • Kivy - 单击按钮时编辑标签

    我希望 Button1 在单击时编辑标签 etykietka 但我不知道如何操作 你有什么想法吗 class Zastepstwa App def build self lista WebOps getList layout BoxLayo

随机推荐

  • Haxe——像 ActionScript 一样嵌入文件?

    在 ActionScript 中 您可以执行以下操作 Embed source src myfile xml mimeType application octet stream private var xml Class 它会嵌入您的文件以
  • 先前操作未完成的问题

    我对 Linux 相当陌生 我正在尝试安装 openCV 软件 我正在安装一些东西 突然断电并且中断了 当我重新安装它时 我不断收到此错误 svn E155037 Previous operation has not finished ru
  • 使用 argparse 调用函数[重复]

    这个问题在这里已经有答案了 我在从 argpars 调用函数时遇到问题 这是我的脚本的简化版本 可以打印我给 s 或 p 的任何值 import argparse def main parser argparse ArgumentParse
  • 如何用 JavaScript 创建一个猜数字游戏?

    我需要创建一个猜数游戏 使用它接收一个值document getElementById并将其输出到
  • 将文件上传到Google存储而不将其保存到内存

    我想将文件从前端直接通过后端上传到Google存储桶中 而不是先将其完全保存在服务器的内存中 我添加了一个类似于以下的端点example https cloud google com go getting started using clo
  • 如何从akka actor获取消息队列的大小?

    应用程序中有Akka Java API 参与者 UntypeActor 和消息 根据API合同 如果几条消息发送给同一个参与者 它们将被一一排队和处理 我想根据队列大小处理参与者中的消息 基本上 在 Actor onReceive 中处理当
  • 将图像数据从 Java 传递到接受指针的 C Native 函数

    我在外部 so 文件中提供了一个 C 函数 该函数将图像数据作为输入 并提供压缩图像以及图像长度作为输出 函数模板如下 char OutputImage CompressImage char InputImage int lenOutIma
  • VB.NET 中带有 = 的奇怪 Case 语句

    在我们的一个班级中找到了这段代码 但我不明白第一个 case 语句在做什么 Case i 1 我确信有人只是错误地从 IF ELSE 语句转换了它 但为什么 VB NET 允许这种语法 这样写是什么意思呢 Dim i As Integer
  • Heroku:推送被拒绝,无法编译 Ruby 应用程序

    我已经被困了一个星期试图解决这个问题 我目前一直在关注在线讲座 但是我完全遵循了所有内容 并且讲师并没有真正提供任何帮助 每当我尝试推送到 heroku 时 我都会收到以下信息 初始化存储库 完成 数物体 85 完成 增量压缩最多使用 2
  • 从 xml 文件中提取信息作为 RDF 三元组

    任何人都可以推荐一个教程或告诉我如何构建一个 java 程序来从 xml 文件中提取信息并使用现有本体生成 RDF 三元组的输出 一个例子真的很有帮助 Thanks 有现成的工具可以解决这个问题 例如XSPARQL http xsparql
  • (使用 Android Studio)AVD 在启动我的应用程序期间崩溃

    我是 Android 应用程序开发新手 我的 AVD 前一天工作正常 但当我第二天尝试启动它时 它停止工作并抛出以下错误 Failed to create Context 0x3005 could not get wglGetExtensi
  • 为什么此代码中的缓冲区溢出行为与我的预期不同?

    我有这个程序 include
  • 谷歌事件跟踪器 v3

    我的 google 事件跟踪器有问题 按照官方文档谷歌开发文档 https developers google com analytics devguides collection android v2 events我添加了带有我的 id
  • 资源池“内部”中系统内存不足

    SQL Server 2008 链接服务器和临时插入会导致快速内存泄漏 最终导致服务器无响应并以以下错误结束 Msg 701 Level 17 State 123 Server BRECK PC SQLEXPRESS Line 2 Ther
  • 用 C# 解压存档

    我想默默摘录 rar档案 Net 在 IO Compression 中没有任何 Rar 类 所以我想使用 cmd 它比外部 dll 更好 它会提取 但不在静默模式下提取 我究竟做错了什么 const string source D 22 r
  • Google App Engine 从不同项目访问云数据存储

    我一直在尝试找到一种解决方案来从另一个谷歌应用程序引擎项目访问一个项目中的数据存储 我浏览了有关从不同项目的计算引擎访问数据存储的教程 但是 这不是我想要的 这里需要的是从不同的应用程序引擎项目访问一个项目上的数据存储 有人成功做到这一点吗
  • Sharepoint 开发人员在技术上是否“具备”进行自定义应用程序开发的能力,反之亦然? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 这可能是一个基于意见的问题 但这是我想问的问题 即使它最终被关闭或删除 我从事自定义应用程序开发 asp net aspMVC 并且对共享点完全
  • JavaTM 加密扩展中的 JCEKS keyStore 使用的加密..?

    In JCEKSkey 存储使用的算法以及密钥的大小 我找到了有用的东西Triple DES 但密钥大小是多少 Thank s 目前 每个PrivateKey and SecretKeyJCEKS 密钥存储中的条目使用 CBC 模式下的 3
  • Objective-C:如何进行控制台输入?

    如何从控制台输入获取 NSString 然后尝试将其转换为 int 您可以阅读char 来自控制台的字符串 scanf 或其他 就像在常规 C 程序中一样 然后 创建一个NSString使用它的对象stringFromCString wit
  • Python Web 服务器:如何异步处理请求

    我需要创建一个 python 中间件来执行以下操作 a 接受来自多个客户端的http get post 请求 b 修改这些请求并将其分派到后端远程应用程序 通过套接字通信 我对此远程应用程序没有任何控制权 c 接收来自后端应用程序的处理结果