当客户端断开连接时,如何停止 django 中的 StreamingHttpResponse?

2024-06-11

我的 django 服务器以 jpeg 流的形式提供视频源,一次一帧。

它看起来像这样:

class VideoCamera():
    def __init__(self):
        # code

    def get_frame(self):
        # code
        return frame

def gen(camera):
    while True:
        yield camera.get_frame()

def view_cam(request):
    return StreamingHttpResponse(gen(VideoCamera()), content_type="multipart/x-mixed-replace;boundary=frame")

这是实时摄像头直播,因此直播没有尽头。我需要在客户端断开连接时中断它,但到目前为止,我不知道如何检测客户端断开连接。

我错过了什么吗?

Edit:

为了消除与相机有关的任何内容,我这样做了:

def gen():
    for i in range(1000):
        time.sleep(1)
        print(i)
        yield i

def view_cam(request):
    return StreamingHttpResponse(gen(), content_type="multipart/x-mixed-replace;boundary=frame")

并连接到我的视图curl -N http://localhost/my_app/view_cam/。它流式传输数字,当我使用 Ctrl+C 停止curl 时,生成器会无限期地继续运行,而不会注意到客户端消失了。如果我再运行并停止卷曲几次,我就会有多个实例gen()函数正在运行,这正是相机所发生的情况。

Edit 2:

该项目使用 Django Channels。我刚刚注意到,如果我通过在 settings.py 中注释掉通道来禁用通道,则上面的示例可以完美运行。我不认为渠道与这个问题有关,但显然,不知何故,它是相关的。

通道开发服务器实际上会在 10 秒后检测到断开连接(不像默认的 django 服务器那样立即检测到),并显示如下:

应用程序实例 call() 运行于 /home/pi/paperless_clipboard/venv3/lib/python3.5/site-packages/channels/http.py:213> wait_for=._call_check_cancel() 在 /usr/lib/python3.5/asyncio/futures.py:452,Task._wakeup()]>> for 连接关闭时间太长并被终止。

但尽管有消息称有东西被杀了gen()继续运行,将数字打印到终端。


你不能根据文档:

性能考虑Django 是为短期请求而设计的。流式响应将在整个响应期间绑定一个工作进程。这可能会导致性能不佳。

一般来说,您应该在请求-响应周期之外执行昂贵的任务,而不是诉诸流式响应。

https://docs.djangoproject.com/en/2.1/ref/request-response/#streaminghttpresponse-objects https://docs.djangoproject.com/en/2.1/ref/request-response/#streaminghttpresponse-objects

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

当客户端断开连接时,如何停止 django 中的 StreamingHttpResponse? 的相关文章

  • 来自 yahoo 的 python lxml etree 小程序信息

    雅虎财经更新了他们的网站 我有一个 lxml etree 脚本 用于提取分析师建议 然而现在 分析师的建议已经存在 但只是以图表的形式出现 你可以看到一个例子这一页 https finance yahoo com quote CSX ana
  • Python + Selenium:驱动程序路径

    是否有可能在不输入路径的情况下运行 Python Selenium 脚本exePython 行中每个脚本中的文件 driver webdriver Chrome 同样的问题也适用于 IE 驱动程序 Edge 驱动程序 和 Gecko 驱动程
  • 在ubuntu中安装pyinterval

    我正在尝试安装 python 库 pyinterval 它需要 crlibm C 标头 我已安装该标头 没有错误 但似乎是问题的根源 当我跑步时 sudo easy install pyinterval 我得到以下信息 Searching
  • 对训练和测试数据帧使用相同的标签编码器

    我有 2 个不同的 csv 其中包含训练数据和测试数据 我从这些 train features df 和 test features df 创建了两个不同的数据帧 请注意 测试和训练数据有多个分类列 因此我需要对它们应用 labelEnco
  • Keras ImageDataGenerator 验证分割未从打乱的数据集中选择

    如何将图像数据集随机拆分为训练数据集和验证数据集 更具体地说 validation splitKeras 中的论证ImageDataGenerator函数不是随机地将我的图像分割为训练和验证 而是从未洗牌的数据集中分割验证样本 当指定val
  • 如何从数据存储区刷新 NDB 实体?

    我希望能够在我的代码调用的测试中断言Model put 对于已修改的实体 不幸的是 似乎正在进行一些缓存 例如以下代码 from google appengine ext import ndb class MyModel ndb Model
  • 从 paramiko 获取 PID

    我找不到一个简单的答案 我正在使用 paramiko 远程登录并执行多个进程 我需要每个进程的 PID 以便稍后检查它们 paramiko 中似乎没有函数来获取执行命令的 PID 所以我尝试使用以下命令 stdin stdout stder
  • python中matlab find函数的替换

    我正在尝试寻找合适的python函数来替代matlabfind在我的脚本和一些谷歌搜索中我看到np where 大多数时候都能解决目的 但在双重条件的情况下 我有不同的输出 有人可以告诉我这种方法有什么问题以及如何继续吗 示例代码和差异如下
  • 如何使用 Python 从 URL 中删除查询字符串

    Example http example com a text q2 text2 q3 text3 q2 text4 删除后 q2 它将返回 http example com q text q3 text3 在这种情况下 出现了多个 q2
  • 由 asyncio.new_event_loop 创建的事件循环挂起

    以下代码只是挂起而不打印任何内容 import asyncio async def foo loop print foo loop stop loop asyncio new event loop asyncio ensure future
  • 在Django表单中设置隐藏字段的值

    我在用着django registration管理我的注册 我试图强制我的用户名和电子邮件在 Django 应用程序中相同 并且我尝试通过注册表来完成此操作 如下所示 class NoUsernameRegistrationForm Reg
  • PySpark:根据与另一列中的字符串匹配的字典值创建新列

    我有一个数据框 A 如下所示 ID SOME CODE TITLE 1 024df3 Large garden in New York New York 2 0ffw34 Small house in dark Detroit Michig
  • 是否可以通过 Python 使用 Cocoa API?

    我想知道是否可以将 Cocoa Apple 的 API 与 Python 一起使用 以便能够运行像这样的任何代码link https developer apple com documentation appkit nsworkspace
  • Django 和 REST API 服务基于计算的请求

    我在 Django 中编写了一个机器学习应用程序 以便用户可以在表单中指定一些参数并训练模型 模型训练完成后 我想满足以下请求 curl http localhost 8000 model input XYZ 我希望 Django 返回给定
  • Python 生成器每次调用都会产生相同的值

    我希望这个生成器生成列表中每个连续值的余弦 但每次都得到相同的值 import math angles range 0 361 3 calculate x coords def calc x angle list for a in angl
  • 在 Django 中执行模型创建代码

    我想在 Django 模型首次创建时执行一些代码 之后 每当保存它时 我想执行一些其他代码 第二个任务可以通过重写 save 方法轻松完成 我怎样才能完成第一个任务 延伸sdolan https stackoverflow com user
  • pandas 数据帧和聚合中的行明智排序

    我在 pandas dataframe df 中有一个表 col1 col2 count 12 15 3 13 17 5 1 36 4 15 12 7 36 1 4 等等 我想要的是将 12 和 15 和 15 和 12 等计算值视为相同
  • 如何在 python setup.py 中 chmod 文件?

    我使用 setup py 创建了一个 python 包安装 我希望它复制文件夹 为临时创建的 did 中的数据文件 问题是我必须使用 sudo 权限调用 setup py 因为它写入 usr local 因此 当我的数据文件复制到 did
  • 如何在(最好是纯)Python 中解码 QR 码图像?

    TL DR 我需要一种使用 最好是纯 Python 从图像文件中解码 QR 码的方法 我有一个带有 QR 码的 jpg 文件 我想使用 Python 对其进行解码 我发现有几个库声称可以做到这一点 PyQRCode 网站在这里 http p
  • 使用 Python 和 lxml 从 HTML 中删除类属性

    Question 如何使用 python 和 lxml 从 html 中删除类属性 Example I have p class DumbClass Lorem ipsum dolor sit amet consectetur adipis

随机推荐

  • 没有名为 pyvirtualdisplay 的模块

    我在 python 代码中导入了这个 import time import sys from pyvirtualdisplay import Display from selenium import webdriver 当我从 centos
  • 如何在 PowerShell 中获取当前活动/前台窗口

    我知道这可以通过使用 alt tab 轻松完成 但创建此脚本的主要目的是自学一些 PowerShell 基础知识 我正在编写一个脚本 运行时会在 powershell 和当前前台窗口之间切换前台窗口 我读这个问题 https stackov
  • Spring 正在创建多个 bean 实例

    我使用 autowire Controller 创建了一个名为 RegistrationController 的 Spring 控制器 出于我自己的好奇心 我创建了一个默认构造函数 如下所示 并添加了一条记录器语句 public Regis
  • 在尊重访问控制的同时为 REST API 序列化 SQLAlchemy 模型?

    目前 我们以及大多数 Web 框架的序列化工作方式是通过某种类型的方法调用将模型转储为某种类型的格式 在我们的例子中 我们有一个to dict 每个模型上构造并返回键值字典的方法 其中键是字段名称 值是实例变量 在我们的整个代码中 我们都有
  • IBM Worklight 6.0 - 在 Liberty 配置文件上安装 WL 6.0 服务器后,Worklight 控制台不显示 - 错误 500

    IBM Worklight 6 0 安装在带有 mySQL 数据库的 Liberty Profile 8 5 5 上 部署应用程序并尝试访问 Worklight 控制台时 控制台上遇到以下错误 错误 500 javax servlet Se
  • 在 ggduo 散点图矩阵中显示相关指数

    我有这样的事情 library GGally df data frame runif 100 rnorm 100 rgamma 100 1 2 rt 100 1 rf 100 1 2 ggduo df columnsX 1 2 column
  • 重置标题/副标题后如何调整标注气泡的大小

    我创建了一个名为 PushPin 的 MKAnnotation 它有标题和副标题 我希望能够稍后动态更改标题 我已经很接近了 所以我宁愿不必制作一个全新的 AnnotationView 但如果必须的话 我想那也可以 我的问题是 一旦更改标题
  • 数据表中的最大行数

    我的 data table 中有一个包含 8 000 000 行 100 列的数据集 其中每列都是一个计数 我需要找到每行的最大计数以及该最大值位于哪一列 我可以使用以下命令快速获取每行的哪一列具有最大值 dt lt dt maxCol w
  • 无需安装即可获取给定源目录的 python3 包元数据

    我正在尝试获取一些包元数据 名称 版本 并给出源目录的路径 而不安装所述包 这些工作 使用setup py如果您位于根目录中 gt python3 setup py name my package name gt python3 setup
  • Spacy提取特定名词短语

    我可以在 python 中使用 spacy 来查找具有特定邻居的 NP 吗 我想要文本中前后都有动词的名词短语 您可以合并名词短语 这样它们就不会单独标记化 分析依存解析树 查看相邻标记的 POS gt gt gt import spacy
  • 如何通过中央 CVS 存储库在本地使用 Mercurial?

    目前我公司正在使用cvs进行版本控制 我想在本地使用 Mercurial 因为它具有灵活性和合并功 能 这将使我的工作变得更加轻松 这应该怎么做呢 First 本地获取CVS存储库 Second 在此 CVS 存储库上本地创建一个 Merc
  • 如何使用 pydicom 读取所有 DICOM 属性/标签?

    我正在尝试使用 pydicom 获取给定 DICOM 实例的所有属性 标签 的列表 该列表应包含属性 key id 其vr 值以及相应的名称 例如 Tag 2 0 VR UL Name File Meta Information Group
  • Android 类未找到异常

    我的应用程序有问题 昨天一切正常 但今天我更新了 sdk 现在当我尝试运行我的应用程序时 我收到这样的错误 05 21 00 14 19 285 W dalvikvm 7061 Unable to resolve superclass of
  • 如何在 Nhibernate 中进行版本控制?

    我不敢相信让别人向我展示一个简单的工作示例是如此困难 这让我相信每个人都只能说得好像他们知道如何去做 但实际上他们并不知道 我将帖子缩短为仅我想要示例执行的操作 也许帖子太长了 吓跑了人们 为了获得这个赏金 我正在寻找一个可以在 VS 20
  • 为什么在 C++ 中更喜欢 char* 而不是 string?

    我是一名 C 程序员 正在尝试编写 C 代码 我听说string在 C 中比char 在安全性 性能等方面 但有时似乎char 是一个更好的选择 有人建议程序员不要使用char 在 C 中 因为我们可以做所有的事情char 可以用绳子来做
  • 如何在 Android 上运行我的 Node.js 项目?

    我的 android 平板电脑上有一个可用的 php 服务器 所以我希望它也可以以某种方式运行 nodejs 源代码可以在github上找到 也可以在linux上构建 但我不太明白如何构建它 提前致谢 网站上缺少构建说明 下载它 wget
  • Web API 中的模型验证 - 在没有 throw 语句的情况下抛出异常?

    我见过model validation from here http www asp net web api overview formats and model binding model validation in aspnet web
  • 基于内部图标的传单簇颜色

    我的 leaflet js 地图上有图钉 其中图像由它们所代表的对象的状态确定 例如 在线和离线用户 在线为绿色 离线为红色 我通过向 divIcon 添加一个类 然后使用 css 控制图像来实现此目的 我现在已将标记聚类添加到我的地图中
  • 如何停止 mat-autocomplete 以将自定义用户输入值与给定选项分开?

    我正在使用来自material angular io的mat auto完整组件 默认行为是用户可以输入任何值 并提供可供选择的选项 您还可以将您的输入添加到所选值中 您可以在此处查看示例 https stackblitz com angul
  • 当客户端断开连接时,如何停止 django 中的 StreamingHttpResponse?

    我的 django 服务器以 jpeg 流的形式提供视频源 一次一帧 它看起来像这样 class VideoCamera def init self code def get frame self code return frame def