2016-11-12 21 views
6

Grałem z bokeh przez trochę czasu i jestem teraz na etapie, w którym chciałbym stworzyć interaktywne wątki i osadzić je online (na przykład w postach WordPress).Jaki jest cel curdoc()?

Jednak mimo, że spędziłem trochę czasu na przeglądaniu i testowaniu kodu na przykładach z witryny bokeh, trudno mi dokładnie zrozumieć, jaki jest cel curdoc(). Wydaje się konieczne, aby stworzyć aplikację bokeh z widżetami, ale z tego, co znalazłem w źródłach, nie do końca rozumiem.

Odpowiedz

5

Pewna terminologia jest w porządku. Podczas tworzenia wykresu Bokeh składa się on z wielu mniejszych obiektów, na przykład glifów, zakresów, źródeł danych, narzędzi itd. A sam wykres jest w zasadzie kontenerem dla wszystkich tych obiektów. Wszystkie te obiekty, w tym fabuła, nazywane są modelami . Inne modele są podobnymi układami (na przykład row i column), jak również widżetami wbudowanymi w Bokeh (np. Slider lub Select).

Dla każdego z tych modeli po stronie Pythona istnieje odpowiedni obiekt JavaScript, który faktycznie implementuje model i wykonuje całą pracę w przeglądarce w celu rysowania lub interakcji. Sposób, w jaki działa Bokeh, może automatycznie przekształcić kolekcję modeli Pythona w stos JSON, a następnie BokehJS może ponownie utworzyć wszystkie odpowiadające im obiekty JS.

Dokument jest zbiorem Bokeh Modele. Jest to najmniejsza "jednostka serializacji". Oznacza to, że często nie ma sensu przekształcanie pojedynczego modelu Pythona w JSON (tak jak w przypadku Plot), ponieważ obiekt może odnosić się do wielu innych obiektów (takich jak osie lub glify itp.). Tak więc kolekcja modeli w a Bokeh Dokument można wszystkie razem zamienić w JSON w znaczący sposób.

Wszystkie powyższe zasady obowiązują niezależnie od tego, czy robisz samodzielne dokumenty (np. Z output_file), czy tworzysz aplikacje Bokeh na serwerze Bokeh. W przypadku aplikacji Bokeh sam kod aplikacji jest tak naprawdę tylko receptą na modyfikowanie dokumentu. Tak więc zawsze, gdy tworzona jest sesja aplikacji Bokeh (tj. Gdy użytkownik otwiera adres URL do aplikacji bokeh na serwerze Bokeh), tworzony jest nowy pusty Document i uruchamiany jest kod aplikacji, gdzie nowy Document dla tego sesja jest dostępna pod numerem curdoc(). Następnie kod aplikacji może dodawać elementy do tego dokumentu (np. Z curdoc().add_root(...), a gdy tylko kod aplikacji zostanie zakończony, "ukończony" dokument zostanie zwrócony do JSON i wysłany do BokehJS, aby pokazać użytkownikowi:

The Na koniec głównym celem serwera Bokeh jest upewnienie się, że tworzone w ten sposób dokumenty Bokeh pozostają automatycznie zsynchronizowane z widokiem użytkownika w przeglądarce.Jeśli użytkownik wyczyści suwak, aktualizacja modelu Slider Dokument JS w przeglądarce, który automatycznie aktualizuje obiekt suwaka Pythona w dokumencie Pythona również na serwerze Bokeh. Aplikacja może zareagować na to i wprowadzić inne zmiany (np. Zaktualizować źródło danych Pythona), co powoduje, że dane JS źródło do aktualizacji (i tym samym zmienia wykres). Ta automatyczna dwukierunkowa synchronizacja zapewnia wszystko t on wyrafinowane możliwości interaktywne z serwerem Bokeh.