将控制台数据发送到烧瓶应用程序以显示在客户端上

时间:2013-10-09 08:58:10

标签: python flask ipython gevent

我正在尝试使用javascript绘图库来绘制我使用Numpy在python控制台(IPython)中计算的数据。

我在考虑设计来实现这一目标。我认为应该看起来像这样:

enter image description here

这意味着我正在使用Flask应用程序在IPython进程中准备好数据后立即向客户端发送服务器端事件。

1)这是正确的做法吗?

2)如何将数据从控制台发送到我的Flask应用程序?我想我需要使用gevent运行Flask应用程序,这样我就可以听到来自其他python进程的命令了吗?

3)如何使用服务器端事件将数据发送到客户端?我找到了一些服务器端事件的例子,但我看不出他们如何发送任意数据。例如:

import gevent
import gevent.monkey
from gevent.pywsgi import WSGIServer
gevent.monkey.patch_all()

from flask import Flask, request, Response, render_template

app = Flask(__name__)

def event_stream():
    count = 0
    while True:
        gevent.sleep(2)
        yield 'data: %s\n\n' % count
        count += 1

@app.route('/my_event_source')
def sse_request():
    return Response(
            event_stream(),
            mimetype='text/event-stream')

@app.route('/')
def page():
    return render_template('sse.html')

if __name__ == '__main__':
    http_server = WSGIServer(('127.0.0.1', 8001), app)
    http_server.serve_forever()

此示例使用预定义的event_stream()函数。我正在寻找一种方法将数据从python控制台发送到客户端。

也许有另一种更好的方法?

1 个答案:

答案 0 :(得分:0)

是普通IPython终端($ipython console)的$ipython(zmq控制台)吗? 为什么不直接使用IPython笔记本?

(Notebook,QT和zmq控制台可以允许第三个程序监听内核发布的事件。)

查看IPEP 21 and current implementation proposal这是双向内核< - > js沟通。

您是否看过bokeh from continuum似乎几乎可以做到的事情?

(图片中也是IPython而不是iPython,但这是一个细节)