Как заставить сервер bokeh работать с __name__ == "__main__" - PullRequest
1 голос
/ 28 апреля 2019

Я хочу использовать код Python для сервера Bokeh и использовать его в качестве библиотеки.Поэтому я кодирую свой код на _name_=='__main__', но автономный сервер Bokeh не запускается.

def initialize_WatchDataFrame():

     print("Initialize Watchlist")

if __name__ == "__main__":       

    initialize_WatchDataFrame()

    curdoc().add_periodic_callback(update_WatchDataFrame, 2000)
    curdoc().title = "WatchList"

Поэтому, когда я работал на сервере с "bokeh serve Watchlist.py".Я не вижу, чтобы был вызван initialize_WatchDataFrame ().

1 Ответ

0 голосов
/ 28 апреля 2019

Если вы хотите иметь возможность запускать python foo.py и не хотите запускать bokeh serve foo.py, то вам нужно встроить сервер Bokeh в библиотеку .Это требует ручной настройки и запуска Торнадо IOLoop.Вот полный пример:

from bokeh.plotting import figure
from bokeh.server.server import Server
from tornado.ioloop import IOLoop

def modify_doc(doc):
    p = figure()
    p.line([1,2,3,4,5], [3,4,2,7,5], line_width=2)
    doc.add_root(p)

if __name__ == '__main__':
    server = Server({'/bkapp': modify_doc}, io_loop=IOLoop())
    server.start()
    server.io_loop.start()

В зависимости от того, что вы пытаетесь достичь, вам также может понадобиться встроить это приложение, используя server_document, или запустить IOLoop в потоке.Эти варианты использования продемонстрированы в примерах, приведенных в документации.

Вероятно, стоит упомянуть: код, который изменяет документ , запускается только тогда, когда установлено соединение с браузером .(И еще: он запускается каждый каждый раз, когда устанавливается соединение с браузером, для создания нового документа только для этого сеанса.)

...