flask + oracle - 当被另一个脚本调用时,并行查询不再有效(散景)

问题描述 投票:0回答:1

我有一个带有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在开始下一个之前渲染,它就可以工作。任何澄清将不胜感激。

flask bokeh cx-oracle
1个回答
0
投票

在周围喷洒打印语句表示散景脚本(当你一个接一个地打开一个)甚至不运行。这真的很奇怪,因为第一个场景几乎是一样的。

有趣的是,我安装了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个并行渲染。最后一个散景服务器似乎处理了两次(我可以通过打印喷洒),页面停止加载而不完成渲染。如果我明天中午不知道,我想我可能会成为一个新的主题。我没有任何背景,我每天都在学习新东西,这太疯狂了!

© www.soinside.com 2019 - 2024. All rights reserved.