跳转到主要内容

官方Plotly Dash库的异步端口

项目描述

Async Dash

async-dashPlotly Dash库的异步端口,通过将其flask后端替换为其异步对应版本quart创建。

这始于我使用dash创建实时仪表板的需求,特别是具有事件驱动架构。使用async-dashdash-extensions中的组件,例如WebSocket、EventSource等,您可以创建真正基于事件或实时的仪表板。

目录

安装

pip install async-dash

用法

from async_dash import Dash
from dash import html, dcc

简单示例

import asyncio
import random

from async_dash import Dash
from dash import html, Output, Input, dcc
from dash_extensions import WebSocket
from quart import websocket, json

app = Dash(__name__)

app.layout = html.Div([WebSocket(id="ws"), dcc.Graph(id="graph")])

app.clientside_callback(
    """
function(msg) {
    if (msg) {
        const data = JSON.parse(msg.data);
        return {data: [{y: data, type: "scatter"}]};
    } else {
        return {};
    }
}""",
    Output("graph", "figure"),
    [Input("ws", "message")],
)


@app.server.websocket("/ws")
async def ws():
    while True:
        output = json.dumps([random.randint(200, 1000) for _ in range(6)])
        await websocket.send(output)
        await asyncio.sleep(1)


if __name__ == "__main__":
    app.run_server()

动机

除了编写异步代码的所有优点外,async-dash还允许您

  1. 运行真正的异步回调
  2. 使用WebSockets、服务器发送事件等,无需修改Python标准库
  3. 与您的dash应用一起使用quart / fastapi / starlette框架
  4. 如果您使用支持HTTP/2(特别是服务器推送)的服务器,如hypercorn,请使用HTTP/2。

注意事项

目前,我正在将此库作为概念验证进行维护。它不应用于生产。您可以在这里看到与dash的偏差。

如果您决定使用它,我很乐意听到您的反馈。

替代方案

dash-devices

dash-devices是基于quart的另一个异步端口。它甚至能够为回调使用WebSockets,这使得它的速度比dashasync-dash都要快得多。然而,在这个文档最后更新时,该库已经过时。

PS: async-dash深受dash-devices的启发。区别在于async-dash试图尽可能接近dash

已知问题

  1. 调试模式下,回调的异常处理已损坏。因此,它已内部禁用。

待办事项

  1. 编写展示异步dash用例的示例/文章。
  2. 收集来自Dash社区的评论和反馈。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

async-dash-0.1.0a1.tar.gz (6.8 kB 查看哈希值)

上传时间:

构建分布

async_dash-0.1.0a1-py3-none-any.whl (6.8 kB 查看哈希值)

上传时间: Python 3

支持者

AWS AWS 云计算和安全赞助商 Datadog Datadog 监控 Fastly Fastly CDN Google Google 下载分析 Microsoft Microsoft PSF 赞助商 Pingdom Pingdom 监控 Sentry Sentry 错误日志 StatusPage StatusPage 状态页面