在 Flask 中调制 Bokeh 服务器
Posted
技术标签:
【中文标题】在 Flask 中调制 Bokeh 服务器【英文标题】:Modulating Bokeh Servers within Flask 【发布时间】:2018-10-19 18:39:18 【问题描述】:我在一个目录中有许多 Bokeh Server 文件,比如 /dir/bokeh/
,假设 bokeh 服务器被称为 bokeh1.py, bokeh2.py, bokeh3.py
文件结构如下:
|--dir
|---flask.py
|---bokeh
|--bokeh1.py
|--bokeh2.py
我将它们全部部署在烧瓶上,如下所示:
files=[]
for file in os.listdir("/dir/bokeh/"):
if file.endswith('.py'):
file="bokeh/"+file
files.append(file)
argvs =
urls = []
for i in files:
argvs[i] = None
urls.append(i.split('\\')[-1].split('.')[0])
host = 'myhost.com'
apps = build_single_handler_applications(files, argvs)
bokeh_tornado = BokehTornado(apps, extra_websocket_origins=["myhost.com"])
bokeh_http = HTTPServer(bokeh_tornado)
sockets, port = bind_sockets("myhost.com", 0)
bokeh_http.add_sockets(sockets)
然后对于每个散景服务器,我在flask.py
内:
@app.route("/bokeh1")
def bokeh1():
bokeh_script = server_document("http://11.111.11.111:%d/bokeh1" % port)
return render_template("bokserv.html", bokeh_script=bokeh_script)
我需要部署的散景服务器数量可能会快速增长。如何根据我当前的设置有效地为每个散景bokeh1.py, bokeh2.py, bokeh3.py
生成@app.route
?服务器正在 Ubuntu 上运行
【问题讨论】:
【参考方案1】:您可以在一个循环中创建所有函数:
def serve(name):
@app.route("/".format(name))
def func():
bokeh_script = server_document("http://11.111.11.111:%d/%s" % (port, name))
return render_template("bokserv.html", bokeh_script=bokeh_script)
func.__name__ = name
return func
all_serve_functions = [serve(name) for name in all_names]
【讨论】:
由于某种原因,它正在返回,`视图函数映射正在覆盖现有的端点函数:func`。这可能是什么原因造成的? 新发现。您必须在app.route
行上设置endpoint
参数。为了安全起见,请确保 name
不包含扩展名 .py
以上是关于在 Flask 中调制 Bokeh 服务器的主要内容,如果未能解决你的问题,请参考以下文章
使用 Python 的 Bokeh 和 Folium 模块创建的仪表板/地图是不是安全?数据是不是上传到任何外部服务器?
带有 AjaxDataSource 的 Bokeh DataTable 未获取或更新