Bokeh - serwer
Architektura Bokeh ma konstrukcję oddzielającą, w której obiekty, takie jak wykresy i glify, są tworzone za pomocą Pythona i konwertowane w formacie JSON do wykorzystania przez BokehJS client library.
Jest jednak możliwe, aby obiekty w Pythonie i przeglądarce były ze sobą zsynchronizowane za pomocą Bokeh Server. Umożliwia reagowanie na zdarzenia interfejsu użytkownika (UI) generowane w przeglądarce z pełną mocą języka Python. Pomaga także automatycznie przesyłać aktualizacje po stronie serwera do widżetów lub wykresów w przeglądarce.
Serwer Bokeh używa kodu aplikacji napisanego w języku Python do tworzenia dokumentów Bokeh. Każde nowe połączenie z przeglądarki klienta powoduje, że serwer Bokeh tworzy nowy dokument, tylko dla tej sesji.
Najpierw musimy opracować kod aplikacji, który będzie obsługiwany przez przeglądarkę klienta. Poniższy kod renderuje glif linii fali sinusoidalnej. Wraz z wykresem renderowany jest również suwak sterujący częstotliwością fali sinusoidalnej. Funkcja oddzwanianiaupdate_data() aktualizacje ColumnDataSource dane przyjmujące chwilową wartość suwaka jako aktualną częstotliwość.
import numpy as np
from bokeh.io import curdoc
from bokeh.layouts import row, column
from bokeh.models import ColumnDataSource
from bokeh.models.widgets import Slider, TextInput
from bokeh.plotting import figure
N = 200
x = np.linspace(0, 4*np.pi, N)
y = np.sin(x)
source = ColumnDataSource(data = dict(x = x, y = y))
plot = figure(plot_height = 400, plot_width = 400, title = "sine wave")
plot.line('x', 'y', source = source, line_width = 3, line_alpha = 0.6)
freq = Slider(title = "frequency", value = 1.0, start = 0.1, end = 5.1, step = 0.1)
def update_data(attrname, old, new):
a = 1
b = 0
w = 0
k = freq.value
x = np.linspace(0, 4*np.pi, N)
y = a*np.sin(k*x + w) + b
source.data = dict(x = x, y = y)
freq.on_change('value', update_data)
curdoc().add_root(row(freq, plot, width = 500))
curdoc().title = "Sliders"
Następnie uruchom serwer Bokeh, wykonując wiersz poleceń -
Bokeh serve –show sliders.py
Serwer Bokeh uruchamia i udostępnia aplikację pod adresem localhost: 5006 / sliders. Dziennik konsoli przedstawia następujący ekran -
C:\Users\User>bokeh serve --show scripts\sliders.py
2019-09-29 00:21:35,855 Starting Bokeh server version 1.3.4 (running on Tornado 6.0.3)
2019-09-29 00:21:35,875 Bokeh app running at: http://localhost:5006/sliders
2019-09-29 00:21:35,875 Starting Bokeh server with process id: 3776
2019-09-29 00:21:37,330 200 GET /sliders (::1) 699.99ms
2019-09-29 00:21:38,033 101 GET /sliders/ws?bokeh-protocol-version=1.0&bokeh-session-id=VDxLKOzI5Ppl9kDvEMRzZgDVyqnXzvDWsAO21bRCKRZZ (::1) 4.00ms
2019-09-29 00:21:38,045 WebSocket connection opened
2019-09-29 00:21:38,049 ServerConnection created
Otwórz swoją ulubioną przeglądarkę i wprowadź powyższy adres. Wykres przebiegu sinusoidalnego jest wyświetlany w następujący sposób -
Możesz spróbować zmienić częstotliwość na 2, przesuwając suwak.