uWSGI用于上传和处理文件

2023-11-30

我有一个用 Bottlepy 编写的 Python Web 应用程序。它的唯一目的是允许人们上传将要处理的大文件(大约需要 10-15 分钟来处理)。

上传代码相当简单:

@route('/upload', method='POST')
def upload_file():
  uploadfile = request.files.get('fileToUpload')
  if not uploadfile:
    abort(500, 'No file selected for upload')

  name,ext = os.path.splitext(uploadfile.filename)

  if ext not in ['.zip','.gz']:
    abort(500, 'File extension not allowed')

  try:
    uploadfile.save('./files')

    process_file(uploadfile.filename) #this function is not yet implemented

    return "uploaded file '%s' for processing" % uploadfile.filename
  except IOError as e:
    abort(409, "File already exists.")

我计划使用 uWSGI 部署此应用程序(但是,如果其他技术更适合此目的,那么它也不是一成不变的。

因此,我对将 uWSGI 用于此类目的有一些疑问:

  1. 如果文件上传需要几分钟,uWSGI如何能够在不阻塞的情况下处理其他客户端?
  2. 有没有什么方法可以使用uWSGI中的内置功能来卸载处理,以便用户在上传后得到响应并可以查询处理状态?

感谢您的任何帮助。


如果文件上传需要几分钟,那么uWSGI如何能够 处理其他客户端而不阻塞?

它会阻塞。 解决方案是放置一个网络服务器,例如NGINX在...前面uWSGI预缓冲POST要求。所以文件上传实际上是绑定到 NGINX 处理程序直到完成并且then传递给uWSGI处理程序。

有什么方法可以使用内置卸载处理 uWSGI 中的功能,以便用户在上传后得到响应 并可以查询处理状态?

您需要创建一个任务队列系统来减轻 Web 处理程序的处理负担。 这是常见的最佳实践。只要环顾四周寻找python task queues。 对于内置功能,这实际上取决于您需要卸载的任务。 您可以使用内置的uWSGI假脱机程序, 或者uWSGI 骡子。 这些是典型任务队列的非常好的替代方案(例如非常著名的Celery)但有局限性。 只需在您的场景中亲自尝试一下即可。

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

uWSGI用于上传和处理文件 的相关文章

随机推荐

  • Azure 数据工厂中没有管道图

    我使用复制数据向导创建了 2 个管道 但当我单击 图表 操作时 两个管道都没有显示 我收到消息 该工厂不包含管道或数据集 管道均成功运行 并且在单击 管道 边栏选项卡时确实会显示 两条管道均配置为一次性 关于为什么会发生这种情况以及如何解决
  • int(11) 与 int(任何其他)

    我是网络编程新手 正在做一些可以在网上找到的不同教程 我进行了研究 发现在 int 11 中 11 是整数的最大显示宽度 并且它是默认值 除非整数是 UNSIGNED 在本例中为 10 当我看到这样的东西时 id INT 11 not nu
  • 如何使用 asp.net 在 Chrome 中删除或过期 cookie

    这是那些愚蠢的问题之一 答案应该很简单 但似乎不起作用 有人知道我还能去哪里寻找代表吗 我在单击按钮时添加 cookie var impersonationCookie new HttpCookie UserImp ImpAuid impe
  • 从函数返回值,其中 ipython 小部件用于获取输入参数

    我正在尝试 小部件化 我的 IPython 笔记本 但在事件和函数返回值方面遇到了麻烦 这是我认为最好的工作流程 使用小部件获取任意函数的输入值 在事件触发时调用该函数 从函数返回值 我首先尝试使用 interact 方法来调用该函数 但这
  • 有没有办法在构造函数中使用锁定的标准输入和输出,使其与您正在构造的结构一样长?

    我正在建造一个PromptSet可以连续提出一系列问题 出于测试原因 它允许您传递读取器和写入器 而不是直接使用标准输入和标准输出 因为 stdin 和 stdout 是常见的用例 所以我想创建一个默认的 构造函数 允许用户生成一个Prom
  • 如何将 div 标签附加到 SVG 矩形元素中?

    我找不到这个问题的正确解决方案 所以我决定写一个新问题 我什至不确定这是否可能 但我希望如此 这是浏览器提供的 HTML 我从浏览器中的 元素 选项卡复制它
  • 如果 ModelState.IsValid 失败,收到错误消息吗?

    我的控制器中有这个功能 HttpPost public ActionResult Edit EmployeesViewModel viewModel Employee employee GetEmployee viewModel Emplo
  • JAVA .properties 文件

    有一个小问题 我创建了一个属性文件 config properties 位于 resource config properties 这是当前的文件 destinationPDF D Documents NetBeansProjects pr
  • 不同DBMS之间的数据迁移

    因为我无法得到任何满意的答案Question看来我们必须为此编写自己的程序 我们正处于设计阶段 我们正在考虑应该使用哪种格式来备份数据 该程序将用Delphi 编写 需要在 Oracle Informix Msserver 之间导出 导入数
  • 绝对 URL 无 Cookie

    ASP NET 中是否有某种方法可以通过无 Cookie 会话获取绝对 URL 更新 我需要创建其他新的 URL 这不是请求的 URL 我正在使用 Response ApplyAppPathModifier 来获取带有 cookie 会话的
  • 编译器错误消息:无法将类型“long”隐式转换为“string”

    我在转换方面遇到问题 这个转换有什么问题吗 这是错误 编译错误说明 在编译服务此请求所需的资源期间发生错误 请查看以下具体错误详细信息并适当修改您的源代码 编译器错误消息 CS0029 无法将类型 long 隐式转换为 string if
  • 如何在C++和QT中的另一个窗口中显示主窗口的结果图像?

    我目前正在研究 Qt Creator 我想通过在主窗口中从硬盘浏览来获取图像 然后将 RGB 彩色图像转换为灰度图像后 我想在另一个窗口中显示灰度图像 通过单击 浏览 按钮 可以加载彩色图像 其中将应用彩色到灰度图像转换 这里grayIma
  • 如何自定义语义 UI 按钮(背景颜色、边框半径等)

    如何自定义语义 UI 按钮 背景颜色 边框半径等
  • _uiState.value = uiState.value.copy() 不会导致重组

    我的代码出现了一些未解决的情况 我的目标是更改 设备 列表中项目的属性 更新布尔值 更改应该会导致视图重组 但这并没有发生 此外 我可以看到该项目确实随调试器而更改 但它也会导致添加一个附加项目 没有包含更改的旧副本 以显示在我的列表中 你
  • GSON有没有办法一点都不“手软”?

    当 JSON 字符串包含与目标 POJO 类不匹配的字段名称时 GSON 似乎会默默地忽略 概述了一种解决方案here建议使用注释来标记 必填 字段 以使 GSON 在反序列化不包含字段的字符串时失败 但我们定义 POJO 必须 精确 匹配
  • 我是否仍可以在没有 iPhone 6 启动图像的情况下发布 iOS 应用程序(仅在缩放模式下运行的应用程序)?

    Apple AppStore 是否仍接受仅在新款 iPhone 6 中以缩放模式运行的应用程序 或者我是否需要调整整个应用程序才能发布新的更新 是的 您仍然可以像平常一样提交应用程序 而无需针对新的屏幕尺寸调整您的应用程序 它将针对 iPh
  • 将 SQL Server 数据库数据移至 SAP BW

    我读过一些关于将数据从 SAP BW 移入 SQL Server 的文章 我找不到任何有关将数据从 SQL Server 移动到 SAP BW 的文章 这是否可能 如果可以 处理此问题的最佳方法是什么 在搜索这个主题后 我发现了许多解决这个
  • MacPorts 如何安装软件包?如何激活通过 MacPorts 完成的 Ruby 安装?

    尝试使用以下命令行在我的计算机 PPC Mac OSX 10 5 7 上安装 ruby 19 后 sudo port install ruby19 ruby的版本没有改变 ruby v gt ruby 1 8 6 2008 08 11 pa
  • 如何为 Swift 设置单元测试?

    我认为尝试掌握单元测试 Swift 是谨慎的做法 我查看了 WWDC 的 Objective C 版本 对 Objective C 范式非常了解 导入单元测试所依赖的头文件等 fetchFlickrPhotoWithSearch 对于单元测
  • uWSGI用于上传和处理文件

    我有一个用 Bottlepy 编写的 Python Web 应用程序 它的唯一目的是允许人们上传将要处理的大文件 大约需要 10 15 分钟来处理 上传代码相当简单 route upload method POST def upload f