使用 Flask Web 应用程序监控实时数据流

2023-12-30

这是基于发布的答案https://stackoverflow.com/a/13388915/819544 https://stackoverflow.com/a/13388915/819544

我想监视数据流并将其推送到类似于上面答案的前端,但是一旦应用程序启动,流就开始生成/监视数据,并且客户端始终会看到该数据流的当前状态数据流(无论是否从服务器请求数据,数据流都会保持运行)。

我很确定我需要通过线程将数据流与前端分离,但我对线程/异步编程不太熟悉,并且相信我做错了。也许代替threading我需要使用多处理吗?这大致是我想要做的(根据上面链接的答案修改):

app.py

#!/usr/bin/env python
from __future__ import division
import itertools
import time
from flask import Flask, Response, redirect, request, url_for
from random import gauss
import threading

app = Flask(__name__)

# Generate streaming data and calculate statistics from it
class MyStreamMonitor(object):
    def __init__(self):
        self.sum   = 0
        self.count = 0
    @property
    def mu(self):
        try:
            outv = self.sum/self.count
        except:
            outv = 0
        return outv
    def generate_values(self):
        while True:
            time.sleep(.1)  # an artificial delay
            yield gauss(0,1)
    def monitor(self, report_interval=1):
        print "Starting data stream..."
        for x in self.generate_values():
            self.sum   += x
            self.count += 1 

stream = MyStreamMonitor()

@app.route('/')
def index():
    if request.headers.get('accept') == 'text/event-stream':
        def events():
            while True:
                yield "data: %s %d\n\n" % (stream.count, stream.mu)
                time.sleep(.01) # artificial delay. would rather push whenever values are updated. 
        return Response(events(), content_type='text/event-stream')
    return redirect(url_for('static', filename='index.html'))

if __name__ == "__main__":
    # Data monitor should start as soon as the app is started.
    t = threading.Thread(target=stream.monitor() )
    t.start()
    print "Starting webapp..." # we never get to this point.
    app.run(host='localhost', port=23423)

static/index.html

<!doctype html>
<title>Server Send Events Demo</title>
<style>
  #data {
    text-align: center;
  }
</style>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
if (!!window.EventSource) {
  var source = new EventSource('/');
  source.onmessage = function(e) {
    $("#data").text(e.data);
  }
}
</script>
<div id="data">nothing received yet</div>

这段代码不起作用。 “正在启动 webapp...”消息永远不会打印,正常的 Flask 消息也不会打印,并且访问提供的 URL 会确认应用程序没有运行。

如何让数据监视器在后台运行,以便 Flask 可以访问它看到的值并将当前状态推送到客户端(甚至更好:只要客户端正在侦听,就推送当前状态相关值发生变化)?


我只需要改变这一行

t = threading.Thread(target=stream.monitor())

to this:

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

使用 Flask Web 应用程序监控实时数据流 的相关文章

随机推荐

  • NSXMLparser 错误代码 5

    我在我的应用程序中使用亚马逊的 simpledb 解析 xml 时出现错误 代码为 5 IE NSXMLParserErrorDomain 错误 5 有时它工作正常 并且导航没有任何重大变化就会出现该错误 当我多次重新启动应用程序而无需对系
  • Android:如何在主项目中使用测试项目

    我想在 Eclipse 中创建这样的项目结构 并将其与 Maven 一起使用 MyProject AndroidManifest xml res resources for main application src source code
  • div元素中额外空间的解决方案

    在我的应用程序中我使用的是div元素 div 元素下方和上方有一些额外的空间 我怎样才能删除它 Thanks 每个浏览器都有自己的各种元素的边距和填充的默认值 所以除非你明确设置例如 div margin 0 padding 0 在你的 C
  • 如何在不创建数据库的情况下保存谜语游戏的答案?

    我创建了一个具有不同级别的问答游戏 每个级别都包含一个问题 我没有用数据库创建它 我只是用了字符串 当用户回答第一级的问题时 他会被带到第二级 但是当用户返回到第一级时 他必须再次输入答案 即使他之前已经解决了该问题 无论如何 JAVA 是
  • Firemonkey Delphi TWebBrowser 获取文本/HTML

    我如何从 Firemonkey 平台 Android iOS 上的网页获取文本 html TWebBrowser 没有任何这方面的东西 经过一些测试 我结合了JAVAScript和Delphi代码 有一个workground 请参考我的文章
  • 不带列名的动态汇总

    如何根据列的字符串数组动态构造汇总语句 deviceTelemetry summarize
  • Node 7.1.0 new Promise() 解析器未定义不是函数

    我在 OSX 上使用最新的节点版本 7 1 0 但我仍然无法使用 Promises 我明白了 index js new Promise Error new Promise 类型错误 未定义的承诺解析器不是函数 Node 7 1 0不支持ES
  • 访问模块内的 IRQ 描述数组并显示操作名称

    我正在用 C 语言编写一个内核模块 该模块正在努力访问 IRQ 描述数组元素并显示这些元素的所有操作名称 一开始 我认为这个 irq desc 数组就像一个宏 但编译后我明白它不是 然后我使用了 for each irq desc irq
  • 安装 python 模块时出错

    我正在尝试使用标准安装 python 模块python setup py install但我收到以下错误 我对 python 相当陌生 但过去我已经能够以这种方式安装其他模块 我对这个模块的印象setuptools不是我应该从我的 pyth
  • 将初始查询集限制为 django-rest 框架中分页中的对象

    我正在定义一个ModelViewSet using django rest framework 我需要覆盖默认查询集 以便在渲染响应之前对查询集对象执行一些处理 这个过程非常耗时 因此我只想在由于分页响应而实际可供消费者使用的对象上执行它
  • oracle 18中通过json_table解析json

    有一个请求例如 with j sJson as select ID 1444284517 ID ORD 4255 2187606199 Vals CODE ONB2B3BB8 DORD 25 04 2021 from dual select
  • 如何在 RxSwift 中检测可观察对象在特定时间内是否未发出任何事件

    我正在尝试检测是否有可观察的 我的情况按钮 rx tap 在 3 秒内没有发出任何值 如果是的话 我想更新用户界面 到目前为止 这是我的尝试 Observable
  • Struts 2 - 了解 OGNL 和参数拦截器之间的工作原理

    我是 Struts 2 的新手 我正在从 Struts2 In Action 一书中学习它 我很难理解 OGNL 中的一些概念 如下所示 我们知道params拦截器将数据从请求参数移动到操作对象中ValueStack 现在 在阅读时 我看到
  • 检查 TreeView 中选中的节点数

    我是使用树视图的新手 我希望能够确保树视图只能检查一个子节点 如果有人尝试检查多个子节点 它会停止检查事件并取消选择所有父节点和子节点 我该怎么做呢 到目前为止 这就是我所得到的 但它表现得很奇怪 有什么建议么 Update 为了澄清一些事
  • AppleScript - 在 Firefox 上执行 JavaScript

    Safari 和 Chrome 可以通过 AppleScript 执行 JavaScript Safari tell application Safari open location http example com activate do
  • 我应该如何从字符串中删除所有前导空格? - 迅速

    我需要一种方法来删除字符串中的第一个字符 空格 我正在寻找一种方法 甚至是 String 类型的扩展 我可以用它来剪切字符串的字符 要删除前导和尾随空格 let trimmedString string stringByTrimmingCh
  • 如何在 matplotlib 中覆盖 shapefile

    In matplotlib how to overlay the shapefile available in folder as attached below at the top right position outside the p
  • 如何在 iOS 中创建具有动态 tableview 高度的动态 tableview 单元格

    我想根据内容增加表格视图单元格和表格视图高度 假设tableview包含2条记录 第一个单元格高度为100 第二个单元格高度为25 那么tableview高度应该是100 25 125 如何实现这个功能呢 提前致谢 你绝对可以做到这一点 首
  • 根据多列的最大值减少分组数据

    我有像这个例子这样的数据集 但每个输入有 1000 个输入和 1000 个单词 每个输入 x 时间 x 单词组合有 30 个值 在 Copy1 Copy30 列中 df read table header T sep text Input
  • 使用 Flask Web 应用程序监控实时数据流

    这是基于发布的答案https stackoverflow com a 13388915 819544 https stackoverflow com a 13388915 819544 我想监视数据流并将其推送到类似于上面答案的前端 但是一