Created
November 17, 2024 20:43
Revisions
-
timkpaine created this gist
Nov 17, 2024 .There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,5 @@ Example of perspective multiworker webserver (independent perspective instances) ```bash uvicorn server:app --workers 4 ``` This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,36 @@ <html> <head> <script type="module" src="https://cdn.jsdelivr.net/npm/@finos/perspective/dist/cdn/perspective.js"></script> <script type="module" src="https://cdn.jsdelivr.net/npm/@finos/perspective-viewer/dist/cdn/perspective-viewer.js"></script> <script type="module" src="https://cdn.jsdelivr.net/npm/@finos/perspective-viewer-datagrid/dist/cdn/perspective-viewer-datagrid.js"></script> <script type="module" src="https://cdn.jsdelivr.net/npm/@finos/perspective-viewer-d3fc/dist/cdn/perspective-viewer-d3fc.js"></script> <link rel="stylesheet" crossorigin="anonymous" href="https://cdn.jsdelivr.net/npm/@finos/perspective-viewer/dist/css/pro.css"/> <style> perspective-viewer { position: absolute; top: 0; bottom: 0; left: 0; right: 0; display: flex; flex-direction: column; } </style> </head> <body> <perspective-viewer id="viewer"></perspective-viewer> </body> <script type="module"> import perspective from "https://cdn.jsdelivr.net/npm/@finos/perspective/dist/cdn/perspective.js"; window.addEventListener("DOMContentLoaded", async function () { const websocket = await perspective.websocket("ws://localhost:8000/websocket"); const worker = perspective.worker(); await document.getElementById("viewer").load(websocket.open_table("test")); }); </script> </html> This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters. Learn more about bidirectional Unicode charactersOriginal file line number Diff line number Diff line change @@ -0,0 +1,30 @@ import asyncio import random from fastapi import FastAPI, WebSocket from perspective import Server from perspective.handlers.starlette import PerspectiveStarletteHandler from starlette.staticfiles import StaticFiles loop = asyncio.get_event_loop() app = FastAPI() perspective_server = Server() async def websocket_handler(websocket: WebSocket): await PerspectiveStarletteHandler(perspective_server=perspective_server, websocket=websocket).run() app.add_api_websocket_route("/websocket", websocket_handler) app.mount("/", StaticFiles(directory=".", html=True), name="static") async def feed(table): while True: table.update([{"a": random.randint(0, 10), "index": 1}]) await asyncio.sleep(0.1) @app.on_event("startup") def startup(): client = perspective_server.new_local_client(loop_callback=asyncio.get_event_loop().call_soon_threadsafe) table = client.table({"a": "integer", "index": "integer"}, index="index", name="test") loop.create_task(feed(table))