Próbuję wyświetlać dokumenty bokeh za pośrednictwem Django za pomocą pliku wykonywalnego bokeh-server, który tworzy instancję Tornado. Dokumenty w formacie bokeh można uzyskać za pośrednictwem adresu URL podanego w metodzie Session.object_link. Po przejściu do wykonywalny bokeh-serwer zapisuje to na stdout (adresy IP zostały zastąpione elipsy):Sesja Bokeh i pobieranie dokumentów
INFO:tornado.access:200 POST /bokeh/bb/71cee48b-5122-4275-bd4f-d137ea1374e5/gc (...) 222.55ms
INFO:tornado.access:200 GET /bokeh/bb/71cee48b-5122-4275-bd4f-d137ea1374e5/ (...) 110.15ms
INFO:tornado.access:200 POST /bokeh/bb/71cee48b-5122-4275-bd4f-d137ea1374e5/gc (...) 232.66ms
INFO:tornado.access:200 GET /bokeh/bb/71cee48b-5122-4275-bd4f-d137ea1374e5/ (...) 114.16ms
Wydaje się to być komunikacja między instancji Pythona uruchomioną aplikację Django WSGI (zainicjowany przez Apache mod_wsgi) i plik wykonywalny bokeh-server.
Po wysłaniu przeglądarki odpowiedź, w tym wykresy i dane itp. Wymagane dla interfejsu bokeh, istnieje początkowa sieć do przeglądarki, a następnie sieć, jeśli istnieje jakakolwiek interakcja z wykresami, które mają wywołania Pythona. Gdy użytkownik zamknie okno lub przeglądarkę, powyższa sieć działa nadal. Co więcej, tworzenie sieci zatrzymuje się tylko wtedy, gdy procesy Django lub serwera bokeh są zabijane.
Aby rozpocząć sesję bokeh i przekazać adres URL z powrotem do szablonu Django, konieczne jest, aby rozpocząć sesję bokeh w nowym wątku:
def get_bokeh_url(self, context):
t = Thread(target=self.run)
t.start()
return self.session.object_link(self.document.context)
def run(self):
return self.session.poll_document(self.document)
self.session
i self.document
były zarówno zainicjowany przed wątku zostało rozpoczęte. Tak więc w momencie wywołania get_bokeh_url istnieją pewne wykresy na dokumencie, z których niektóre mają wywołania zwrotne interakcji i sesja została utworzona, ale nie została odpytana przez poll_document
(która wydaje się konieczna do interakcji).
Wątek działa wiecznie, chyba że zabijesz Django lub serwer bokeh. Oznacza to, że gdy pojawia się więcej zapytań, rośnie liczba wątków i rośnie liczba kontaktów.
Moje pytanie brzmi, czy istnieje sposób na zabicie nici, gdy dokument nie jest już wyświetlany w przeglądarce?
Jedna z odpowiedzi, o którą się zastanawiałem, to wysłanie szybkiej prośby do serwera, gdy przeglądarka zamknie i jakoś zabije wątek dla tego dokumentu. Próbowałem usunąć dokumenty z interfejsu bokeh, ale nie ma to żadnego wpływu.
FYI Sekcja Dokumenty CLI jest generowana automatycznie z docstrings, itp. PR do dodawania dokumentów narracyjnych do takich rzeczy w [Uruchamianie serwera Bokeh] (http://bokeh.pydata.org/en/latest/docs/user_guide /serwer.html) z pewnością zostanie doceniony, jeśli masz taką możliwość. – bigreddot