我指的是Bokeh's Documentation其中描述了如何将 Bokeh 服务器作为库嵌入。那里有几个示例 python,特别是一个用于“standalone”,另一个用于“Tornado”,但两者都使用 Tornado。 我的问题是:
- 如果两者都使用 Tornado,概念上有什么区别?为什么叫独立版呢? (我不太了解Tornado)。
- 我可以使用面向对象的类设计来编码 GUI,而不是使用具有全局变量的函数,就像给定的示例中那样(请参阅示例中的
modify_doc
方法和引用变量的内部方法在外部范围内)。
最佳答案
与大多数其他 Web 服务器一样,Bokeh 的内置
Bokeh.server.server.Server
需要一个事件循环来运行。在第一个“独立”示例中,它在 Tornado 的IOLoop
之上运行(或如文档所说的“搭载”)。 ,但实际的应用逻辑是由Bokeh内部处理的Application
目的。 (我相信可能可以使用其他一些事件循环,例如 Python 3 的asyncio
中的事件循环,但我还没有测试过它。)然而,第二个示例是使用 Tornado's Web framework 。来路由请求。示例函数没有使用全局变量 - 它(或者更确切地说,内部回调函数)只是利用 Python 的闭包机制,因此它可以将回调函数返回到 Bokeh 的
FunctionHandler
。我对 Bokeh 不太熟悉,但显然有多种不同的方法可以修改文档 -FunctionHandler
,CodeHandler
,ScriptHandler
,NotebookHandler
在Python中,类是像任何其他函数一样的可执行文件,因此我可以轻松地看到将一个传递给FunctionHandler
(实际上应该称为CallableHandler
)。
关于python - 将 Bokeh 服务器嵌入为库 : standalone vs. Tornado 和面向对象的设计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41658991/