【问题标题】:Modulating Bokeh Servers within Flask在 Flask 中调制 Bokeh 服务器
【发布时间】: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 上运行

【问题讨论】:

    标签: python-3.x loops flask bokeh web-development-server


    【解决方案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
    猜你喜欢
    • 2019-08-11
    • 1970-01-01
    • 2017-10-05
    • 1970-01-01
    • 2018-10-22
    • 1970-01-01
    • 1970-01-01
    • 2016-09-02
    • 1970-01-01
    相关资源
    最近更新 更多