如何使用__name__ ==“ __main__”使bokeh服务器工作

时间:2019-04-28 14:28:26

标签: bokeh serve

我想为Bokeh服务器使用python代码并将其也用作库。因此,我通过_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 :(得分:0)

如果您希望能够运行python foo.py而又不想运行bokeh serve foo.py,那么您将必须embed the Bokeh server as library。这就需要手动设置和启动龙卷风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。这些用例在文档中链接的示例中进行了演示。

它可能还需要提及:修改文档的代码仅在建立浏览器连接时运行。 (而且:每次建立浏览器连接时,它都会运行 ,以仅为该会话生成一个新文档。)