我有一个带有oracle作为数据库的烧瓶应用程序。如果我走:
#app.py #SCENARIO 1
from flask import Flask, render_template
import cx_Oracle
app=Flask(__name__)
connection=cx_Oracle.connect("user","pw","xxx", threaded=True)
@app.route("/1")
cur=connection.cursor()
cur.execute("select col1, col2 from tbl1")
result=cur.fetchall()
return result
@app.route("/2")
cur=connection.cursor()
cur.execute("select col4, col5 from tbl2")
result=cur.fetchall()
return result
我同时导航到两个路由,查询并行运行并返回结果。
但是,如果我同时打开两个不同的路由,每个路径也运行来自单独的散景服务器脚本的查询,则不会运行:
烧瓶
#SCENARIO 2
@app.route("/bokeh1")
def b1():
bokeh_script=server_document("http://host:5006/bokeh1")
return render_template("bokserv.html" ,bokeh_script=bokeh_script)
@app.route("/bokeh2")
def b2():
bokeh_script=server_document("http://host:5006/bokeh2")
return render_template("bokserv.html" ,bokeh_script=bokeh_script)
每个散景脚本(bokeh1, bokeh2)
starts通过调用数据库并运行查询,就像在第一个场景中一样。
import bokeh
from app import connection
cur=connection.cursor()
cursor.execute("Select col1, col2 from tbl1")
...
...
curdoc(p)
这两个页面都没有呈现并且卡在永久加载中。为什么它在方案1中起作用而在2中不起作用?如果我按顺序加载散景页,允许1在开始下一个之前渲染,它就可以工作。任何澄清将不胜感激。
在周围喷洒打印语句表示散景脚本(当你一个接一个地打开一个)甚至不运行。这真的很奇怪,因为第一个场景几乎是一样的。
有趣的是,我安装了nginx和gunicorn并使用了一个非常基本的配置(借用了这个例子https://www.youtube.com/watch?v=kDRRtPO0YPA:
server {
location \ {
proxy_pass host:8000;
}
}
在烧瓶中,from bokeh.server import Server
,在num_procs=2
设置Server()
。然后我用gunicorn gunicorn app:app
运行烧瓶,并且能够获得3个散景服务器中的2个并行渲染。最后一个散景服务器似乎处理了两次(我可以通过打印喷洒),页面停止加载而不完成渲染。如果我明天中午不知道,我想我可能会成为一个新的主题。我没有任何背景,我每天都在学习新东西,这太疯狂了!